|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
В книжке написано, что если класс sealed, и унаследоваться от него никак, то методы расширения - самое оно. Вроде понятно, слова русские. Но возникают вопросы. 1. Если класс закрыт для наследования by design, но мы его расширяем - это вообще законно? 2. Вот есть класс, какой-нибудь POCO, стройный и красивый, но надо бы к нему метод чужеродный прилепить... Нарушать стройность не хочется, и тогда я леплю в отдельном файле метод расширения (их там таких много) и делаю вид, что этого файла и нету в принципе. А вы что про них думаете? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 09:14 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
Агнец за бортомВ книжке написано, что если класс sealed, и унаследоваться от него никак, то методы расширения - самое оно. Вроде понятно, слова русские. Но возникают вопросы. 1. Если класс закрыт для наследования by design, но мы его расширяем - это вообще законно? 2. Вот есть класс, какой-нибудь POCO, стройный и красивый, но надо бы к нему метод чужеродный прилепить... Нарушать стройность не хочется, и тогда я леплю в отдельном файле метод расширения (их там таких много) и делаю вид, что этого файла и нету в принципе. А вы что про них думаете?на самом деле любой не статический метод выглядит так же как метод расширения, 1 параметром передается инстанс, а потом все остальные. злоупотреблять методами расширения не стоит. так как это усложняет процесс сопровождения и отладки. можно просто создать статический метод и использовать его, без всяких выкрутасов с методами расширения. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 09:49 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
Агнец за бортомНарушать стройность не хочется, и тогда я леплюи тогда чтобы сохранить стройность, я Леплю)))) Как и в прошлом твоем вопросе все зависит от контекста. Хак всегда допустим вмеру. Выше сказали. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 10:15 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
Окей, тогда зайду с философии - Остаётся ли POCO - POCO, если у него есть метод расширения? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 10:19 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
Метод расширения - это синтаксический сахар, который никак не меняет исходный класс. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 10:24 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
Dima TМетод расширения - это синтаксический сахар, который никак не меняет исходный класс. Ну, это очевидно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 10:38 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
Агнец за бортом1. Если класс закрыт для наследования by design, но мы его расширяем - это вообще законно? Методы расширения не расширяют класс. Это просто методы другого класса + сахар, чтобы сократить количество букв. Агнец за бортом2. Вот есть класс, какой-нибудь POCO, стройный и красивый, но надо бы к нему метод чужеродный прилепить... Нарушать стройность не хочется, и тогда я леплю в отдельном файле метод расширения (их там таких много) и делаю вид, что этого файла и нету в принципе. Это не "метод чужеродный", это просто отдельный метод, на правах ровно такой же, как без this. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 10:39 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
hVosttна правах ровно такой же, как без this. Да лана, и он будет доступен через рефлексию? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 11:31 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
Будет. Только не через рефлексию класса, который он расширяет, а через рефлексию класса, в котором он объявлен. Именно в этом смысле это такой же статический метод, как и любой другой и this - это всего лишь инструкция для компилятора. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 11:39 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
Агнец за бортомОкей, тогда зайду с философии - Остаётся ли POCO - POCO, если у него есть метод расширения? Цель возникновения POCO и POJO это простое сохранение в базу и передать по сети. Если это не нужно, то уже плевать на этот критерий. POCO или нет. Чистенький объект или нет..... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 11:51 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
Агнец за бортомhVosttна правах ровно такой же, как без this. Да лана, и он будет доступен через рефлексию?конечно не будет, его даже не будет видно в IntelliSense если пространство имен с классом в котором метод расширения не использовано. Естественно к private,protected полям доступа из метода расширения так же не будет Extension методы вводили, на сколько я помню, вместе с Linq и по сути для Linq. Там их использование к месту, так как методы будут переиспользованы множество раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 11:55 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
Агнец за бортомhVosttна правах ровно такой же, как без this. Да лана, и он будет доступен через рефлексию? Нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 12:04 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
Агнец за бортом1. Если класс закрыт для наследования by design, но мы его расширяем - это вообще законно? Ровно в той же степени, в какой законна передача экземпляра класса в некий статический метод какого-то другого класса. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 12:07 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
Roman MejtesExtension методы вводили, на сколько я помню, вместе с Linq и по сути для Linq. Там их использование к месту, так как методы будут переиспользованы множество раз. Может их и вводили только для LINQ, но сейчас методы расширения используются повсеместно, много для чего. В том числе для исправления косяков архитектуры .NET ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 12:08 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
hVosttВ том числе для исправления косяков архитектуры .NET автор наверно исправляет косяки предыдущего архитектора) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 12:32 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
hVosttАгнец за бортомпропущено... Да лана, и он будет доступен через рефлексию? Нет. через рефлексию доступно все. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 12:54 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
ЕвгенийВ, чем это отличается от поиска типов по любому кастомному атрибуту? или по методам, принимающим параметры определённого типа? или вообще по имени метода? а теперь возьми тип и найди все расширения для него, не ковыряясь в сборках ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 14:40 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
hVosttЕвгенийВ, чем это отличается от поиска типов по любому кастомному атрибуту? или по методам, принимающим параметры определённого типа? или вообще по имени метода? а теперь возьми тип и найди все расширения для него, не ковыряясь в сборках эээ.... А что ты вообще понимаешь под рефлексией? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 15:24 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
ЕвгенийВhVosttЕвгенийВ, чем это отличается от поиска типов по любому кастомному атрибуту? или по методам, принимающим параметры определённого типа? или вообще по имени метода? а теперь возьми тип и найди все расширения для него, не ковыряясь в сборках эээ.... А что ты вообще понимаешь под рефлексией? Как выше уже было сказано, метод расширения будет доступен через рефлексию, но принадлежать он будет не расширяемому типу, а типу статического класса-расширителя. И вышеприведенное ничем не отличается не просто от поисков по кастомному атрибуту, а вообще от поисков любых методов любых типов, принимающих заданный тип. Метод расширения не является частью публичного контракта типа, и в этом одна из проблем этих методов - я как-то долго наблюдал, как человек пытался в ходе рефакторинга выделить из класса интерфейс, и ему всю малину портил метод расширения. Не хотел этот метод в интерфейс совсем никак. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 16:51 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
Агнец за бортомВ книжке написано, что если класс sealed, и унаследоваться от него никак, то методы расширения - самое оно. Вроде понятно, слова русские. Но возникают вопросы. 1. Если класс закрыт для наследования by design, но мы его расширяем - это вообще законно? 2. Вот есть класс, какой-нибудь POCO, стройный и красивый, но надо бы к нему метод чужеродный прилепить... Нарушать стройность не хочется, и тогда я леплю в отдельном файле метод расширения (их там таких много) и делаю вид, что этого файла и нету в принципе. А вы что про них думаете? 1. Вы нарушаете разумные принципы без всякой необходимости. Это уголовщина )) Во-первых, есть паттерны, чтобы обойти такие "проблемы". Во-вторых, расширения сильно мешают при отладке и изучении кода. В-третих, расширение ничего общего с наследованием не имеет. То, что они "похоже" выглядят только маскирует истинную сущность расширения) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 18:34 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
ЕвгенийВэээ.... А что ты вообще понимаешь под рефлексией? GetType() ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 19:49 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
Сон Веры Павловныя как-то долго наблюдал, как человек пытался в ходе рефакторинга выделить из класса интерфейс, и ему всю малину портил метод расширения да, это шедевр, тоже подобное наблюдал ну... всегда найдётся ложечка дёгтя, ничего не бывает бесплатно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 20:43 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
AddxВо-вторых, расширения сильно мешают при отладке и изучении кода. фига себе. хотелось бы посмотреть, кому и чем мешают. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 20:45 |
|
Методы расширения true/!true?
|
|||
---|---|---|---|
#18+
AddxВ-третих, расширение ничего общего с наследованием не имеет. То, что они "похоже" выглядят только маскирует истинную сущность расширения) Вообще, с помощью интерфейсов и методов расширений в C# реализованы так называемые примеси, в go например только они и есть. Мы можем взять публичный контракт класса определенный интерфейсом и описать некий алгоритм (метод), который будет доступен для всех реализаций интерфейса. Код: 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.
Код: c# 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2018, 15:51 |
|
|
start [/forum/topic.php?fid=20&fpage=31&tid=1399382]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 297ms |
total: | 457ms |
0 / 0 |