оценка стоимости/преимуществ использования дополнительных методов в C# => 3.0 [закрытый]

В дополнение к нескольким комментариям, имеющим отношение к использованию Системы. Методы диагностики для входа, я также хотел бы указать, что инструмент DebugView очень аккуратен для проверки вывода отладки при необходимости - если Вы не требуете его, нет никакой потребности в приложениях для создания файла журнала, Вы просто запускаете DebugView как и, когда необходимый.

7
задан Jon Seigel 15 May 2010 в 22:43
поделиться

4 ответа

Больше всего я использую их для расширения закрытых сторонних API.

В большинстве случаев, когда разработчик программного обеспечения предлагает API для Windows в наши дни, они больше склоняются к и многое другое в сторону .NET для этой расширяемости. Мне нравится это делать, потому что я предпочитаю полагаться на свои собственные методы, которые я могу изменить в будущем и служить глобальной точкой входа в их API, в случае, если они его изменят.

Раньше, когда приходилось делать это , и я не мог наследовать объект API, потому что он был запечатан или что-то в этом роде, я бы полагался на шаблон адаптера , чтобы создать свои собственные классы, которые обертывают свои объекты. Это функциональное, но довольно неэлегантное решение. Методы расширения дают вам прекрасный способ добавить больше функциональности к тому, что вы не контролируете.

Многие другие люди ' Наиболее часто они используются LINQ !

LINQ был бы невозможен без методов расширения, предоставляемых IEnumerable.

Люди любят их потому, что они делают код более читаемым .

Я заметил еще одно ГЛАВНОЕ использование методов расширения (в том числе и меня) - сделать код более читабельным и создать впечатление, что код, выполняющий что-то , принадлежит тому месту, где он должен . Он также избавляется от ужасного статического класса бога "Util", который я видел много раз. Что выглядит лучше ... Util.DecimalToFraction (десятичное значение); или value.ToFraction (); ? Если вы похожи на меня, то последнее.

Наконец, есть те, кто считает «статический метод» ЗЛО !

Многие «хорошие программисты» скажет вам, что вам следует избегать статических методов, особенно тех, которые используют обширное модульное тестирование. Статические методы в некоторых случаях трудно протестировать, но они не злы , если используются правильно. Хотя методы расширения ЯВЛЯЮТСЯ статическими ... они не выглядят и не действуют так же. Это позволяет вам получить эти статические методы из ваших классов на объекты, к которым они действительно должны быть присоединены.

Что касается производительности ..

Методы расширения ничем не отличаются от вызова статического метода, передавая объект, являющийся расширен как параметр ... потому что это то, во что его превращает компилятор. Самое замечательное в этом то, что ваш код выглядит чистым, он делает то, что вы хотите, а компилятор выполняет грязную работу за вас.

Статические методы в некоторых случаях трудно протестировать, но они не являются злом , если используются правильно. Хотя методы расширения ЯВЛЯЮТСЯ статическими ... они не выглядят и не действуют так же. Это позволяет вам получить эти статические методы из ваших классов на объекты, к которым они действительно должны быть присоединены.

Что касается производительности…

Методы расширения ничем не отличаются от вызова статического метода, передавая объект, являющийся расширен как параметр ... потому что это то, во что его превращает компилятор. Самое замечательное в этом то, что ваш код выглядит чистым, он делает то, что вы хотите, а компилятор выполняет грязную работу за вас.

Статические методы в некоторых случаях трудно протестировать, но они не злы , если используются правильно. Хотя методы расширения ЯВЛЯЮТСЯ статическими ... они не выглядят и не действуют так же. Это позволяет вам получить эти статические методы из ваших классов на объекты, к которым они действительно должны быть присоединены.

Что касается производительности…

Методы расширения ничем не отличаются от вызова статического метода, передавая объект, являющийся расширен как параметр ... потому что это то, во что его превращает компилятор. Самое замечательное в этом то, что ваш код выглядит чистым, он делает то, что вы хотите, а компилятор выполняет грязную работу за вас.

не выглядеть или вести себя так. Это позволяет вам получить эти статические методы из ваших классов на объекты, к которым они действительно должны быть присоединены.

Что касается производительности ..

Методы расширения ничем не отличаются от вызова статического метода, передавая объект, являющийся расширен как параметр ... потому что это то, во что его превращает компилятор. Самое замечательное в этом то, что ваш код выглядит чистым, он делает то, что вы хотите, а компилятор выполняет грязную работу за вас.

не выглядеть или вести себя так. Это позволяет вам получить эти статические методы из ваших классов на объекты, к которым они действительно должны быть присоединены.

Что касается производительности…

Методы расширения ничем не отличаются от вызова статического метода, передавая объект, являющийся расширен как параметр ... потому что это то, во что его превращает компилятор. Самое замечательное в этом то, что ваш код выглядит чистым, он делает то, что вы хотите, а компилятор выполняет грязную работу за вас.

11
ответ дан 6 December 2019 в 10:51
поделиться

Я использую методы расширения как способ улучшить функциональность классов без увеличения сложности класса. Вы можете сохранить свои классы простыми, а затем добавить повторяющуюся работу позже в качестве расширения.

Методы расширения Min () и Max () являются прекрасным примером этого. Вы могли бы так же легко объявить частный метод, который будет их вычислять, но метод расширения обеспечивает лучшую читаемость, делает функциональность доступной для всего вашего проекта и не требует создания массива более сложного объекта.

4
ответ дан 6 December 2019 в 10:51
поделиться

Использование метода подкласса по сравнению с методами расширения требует, чтобы выполнялись два условия

  1. Тип должен быть расширяемым (не запечатанным)
  2. Все места, где создается тип должен поддерживать своего рода фабричный шаблон, иначе другой код просто создаст базовый тип.

Для добавления метода расширения на самом деле не требуется ничего, кроме использования компилятора C # 3.0+.

Но, что наиболее важно, иерархия наследования должна представлять отношения «есть-а». Я не считаю, что добавление 1 или 2 новых методов / поведения к классу действительно выражает этот тип отношений. Вместо этого он усиливает существующее поведение. Класс-оболочка или метод расширения намного лучше подходят для этого сценария.

2
ответ дан 6 December 2019 в 10:51
поделиться

В некоторых случаях нельзя использовать подкласс: например, строка запечатана. Однако вы все равно можете добавлять методы расширения.

1
ответ дан 6 December 2019 в 10:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: