У метода расширения есть ограничение в c # - PullRequest
3 голосов
/ 22 февраля 2010

Я хочу спросить, работает ли добавление методов расширения к типам данных так же, как методы Microsoft, или они имеют какие-либо ограничения.

Это относится к опытным программистам, которые нашли некоторые ограничения при их использовании.

Ответы [ 3 ]

2 голосов
/ 22 февраля 2010

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

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

Кроме того, я не знаю о существенных ограничениях - и я, конечно, не встречал ситуаций, когда в коде Microsoft применялись специальные правила для методов расширения.

Ваше последнее предложение звучит так, будто вы видели некоторые ограничения - не могли бы вы поделиться ими с нами?

2 голосов
/ 22 февраля 2010

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

0 голосов
/ 22 февраля 2010

Основное отличие с точки зрения пользователя состоит в том, что они также вызываются по нулевым ссылкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...