Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
Почему существует всего одно ограничение на конструкторы - new()? Собирается ли МС запиливать в new() аргументы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 10:57 |
|
||
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
а меня расстраивает отсутствие наследования конструкторов. Собирается ли МС запиливать наследование конструкторов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 12:15 |
|
||
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
AntonariyПочему существует всего одно ограничение на конструкторы - new()? Собирается ли МС запиливать в new() аргументы? как ты себе это представляешь? это уже похоже на трейты, на уровне языка это не поддерживается Shocker.Proа меня расстраивает отсутствие наследования конструкторов. Собирается ли МС запиливать наследование конструкторов? противоречит самой сути конструкторов. есть же base(), а у типа должен быть свой конструктор, так как конструируется экземпляр конкретного типа, поэтому наследование тут неуместно в принципе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 13:26 |
|
||
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
hVosttAntonariyПочему существует всего одно ограничение на конструкторы - new()? Собирается ли МС запиливать в new() аргументы? как ты себе это представляешь? это уже похоже на трейты, на уровне языка это не поддерживается В F# можно сделать нечто подобное Код: c# 1. 2. Это означает, что параметр-тип T должен иметь метод Method1 с параметрами (string, decimal) и возвращающий int. Что сложного вести такие ограничения для конструктора? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 14:14 |
|
||
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВ, что мешает определить интерфейс с заданным методом и сделать ограничение по интерфейсу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 16:03 |
|
||
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
если нужно создать экземпляр объекта через конструктор с заданной сигнатурой, используйте тип Activator ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 16:05 |
|
||
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВВ F# можно сделать нечто подобное Код: c# 1. 2. Это означает, что параметр-тип T должен иметь метод Method1 с параметрами (string, decimal) и возвращающий int. Что сложного вести такие ограничения для конструктора? В F# есть вывод типов, а дженерики лишь для совместимости с остальным .NET Там же есть DU, чего не предвидится в C# В общем, нельзя запихнуть в язык все крутые концепции, чем-то нужно жертвовать ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 17:13 |
|
||
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
Roman Mejtesесли нужно создать экземпляр объекта через конструктор с заданной сигнатурой, используйте тип Activator Ну тут речь о контроля на уровне компилятора. Чисто теоретически фича не выглядит как невозможной. Однако нам не видны скрытые подводные камни, которые наверняка есть и не позволяют бесплатно такое реализовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 17:15 |
|
||
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
Roman MejtesЕвгенийВ, что мешает определить интерфейс с заданным методом и сделать ограничение по интерфейсу?Ничего не мешает. Но нужен конструктор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 17:24 |
|
||
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
hVosttAntonariyПочему существует всего одно ограничение на конструкторы - new()? Собирается ли МС запиливать в new() аргументы? как ты себе это представляешь?как-то так: Код: c# 1. не вижу проблем для компилятора ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 17:26 |
|
||
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
Antonariyкак-то так: Код: c# 1. не вижу проблем для компилятора это же в мета-данных типа хранится, видимо с этим какие-то проблемы может боятся каскадной зависимости, хотя ограничение new() есть сталкивался с потребностью такой фичи, но как-то обошёл )) вообще, то, что не может компилятор приходится делать либо юнит-тестами, или/либо расширениями на Roslyn ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 17:30 |
|
||
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
Да я тоже обошел с помощью наследования (int, string, DatеTime в свойствах базового класса) и фабрики Create<T> (которая устанавливает эти свойства). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 17:53 |
|
||
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
hVostt В F# есть вывод типов, а дженерики лишь для совместимости с остальным .NET Ну в C# тоже какой-никакой вывод типов :) А вот дженерики в F# аж двух видов 'T и ^T и есть они так же в OCalm, который является прародителем F# и с C# не имеет ничего общего. Например это let inline a f b c = f b %&> b c означает функция a которая принимает 3 аргумента f - функция, которая аргументом принимает функцию b, последняя принимает аргументом обобщенный параметр c при чем результатами f и b являются некоторые типы, для которых определен оператор %&> hVostt Там же есть DU, чего не предвидится в C# DU к ограничениям и выводу типов не имеют никакого отношения. hVosttВ общем, нельзя запихнуть в язык все крутые концепции, чем-то нужно жертвовать ) Можно, но это увеличит порог вхождения и тогда это еще сильнее увеличит разницу между самыми тупыми разработчиками на C# и самыми толковыми программистами C#. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 18:26 |
|
||
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
hVosttAntonariyкак-то так: Код: c# 1. не вижу проблем для компилятора это же в мета-данных типа хранится, видимо с этим какие-то проблемы Информация о методах тоже хранится в мета - данных и ничего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 18:29 |
|
||
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
hVosttможет боятся каскадной зависимости, хотя ограничение new() есть сталкивался с потребностью такой фичи, но как-то обошёл )) вообще, то, что не может компилятор приходится делать либо юнит-тестами, или/либо расширениями на Roslyn Всё гораздо проще. Ответ Липперта: However, in this specific case I can certainly give you some reasons why I would push back on the feature if it came up in a design meeting as a possible feature for a future version of the language. ... I say that we should either do the whole feature or don't do it at all. If it is important to be able to restrict types to have particular constructors, then let's do the whole feature and restrict types on the basis of members in general and not just constructors. В общем, лениво трудиться непонятно над чем, и что мало кому нужно. Ну, а если сильно припрет, можно дополнительно в генерик-метод передавать генерик-делегат-фабрику с нужной сигнатурой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 18:40 |
|
||
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
Кстати . "Штирлиц упорно продолжал стоять на своём". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 18:43 |
|
||
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВНу в C# тоже какой-никакой вывод типов :) ну с натягом я бы сказал :) ЕвгенийВозначает функция a которая принимает 3 аргумента f - функция, которая аргументом принимает функцию b, последняя принимает аргументом обобщенный параметр c при чем результатами f и b являются некоторые типы, для которых определен оператор %&> да, вот это вывод типов ) ЕвгенийВDU к ограничениям и выводу типов не имеют никакого отношения. это к тому, что этого тоже сильно не хватает, чтобы писать в функциональном стиле ЕвгенийВМожно, но это увеличит порог вхождения и тогда это еще сильнее увеличит разницу между самыми тупыми разработчиками на C# и самыми толковыми программистами C#. или лениво, как справедливо замечено выше ) Сон Веры Павловны Кстати . "Штирлиц упорно продолжал стоять на своём". а ещё бы вывод дженериков через конструктор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 23:27 |
|
||
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
hVostt ЕвгенийВDU к ограничениям и выводу типов не имеют никакого отношения. это к тому, что этого тоже сильно не хватает, чтобы писать в функциональном стиле Можно симулировать. автор Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2019, 12:04 |
|
||
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВМожно симулировать. к сожалению, это не то :) всё прибито гвоздями к базовому типу да и если всё наследовать от одного, весь смысл теряется на корню ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2019, 19:42 |
|
||
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
hVosttЕвгенийВМожно симулировать. к сожалению, это не то :) всё прибито гвоздями к базовому типу да и если всё наследовать от одного, весь смысл теряется на корню Компилятор F# именно так все и разворачивает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2019, 19:51 |
|
||
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВКомпилятор F# именно так все и разворачивает :) Это я знаю. Но это делает компилятор, а не человек :) И с точки зрения синтаксиса ничего подобного на C# не повторить, только "развернуть" руками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2019, 19:53 |
|
||
|
Ограничения дженериков
|
|||
|---|---|---|---|
|
#18+
hVosttAntonariyПочему существует всего одно ограничение на конструкторы - new()? Собирается ли МС запиливать в new() аргументы? как ты себе это представляешь? это уже похоже на трейты, на уровне языка это не поддерживается ... Имхо, гораздо больше то, чего хочет Antonariy, похоже на concepts. // https://en.wikipedia.org/wiki/Concepts_(C ) // https://en.cppreference.com/w/cpp/language/constraints то есть, редуцируя, это требование наличия определенного подмножества реализуемых методов (подмножества публичного интерфейса класса), выраженное в виде набора логических утверждений, разрешимых в момент компиляции. Другой вопрос, что в месте своего изобретения, концепции вряд ли ( не знаю насколько) применимы к конструкторам, работающими вместе с new. Там вроде как принято (или было принято) считать, что всякий new в обобщенном коде - тяжкий грех, почти наверно - тяжелейшая, не подлежащая объяснению или оправданию ошибка проектирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2019, 21:56 |
|
||
|
|

start [/forum/topic.php?fid=20&fpage=16&tid=1398782]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 10ms |
| total: | 155ms |

| 0 / 0 |
