Различия между методами расширения в C # 3 и 4 - PullRequest
1 голос
/ 04 января 2011

Мне кажется, я помню, как давно читал, что в C # 3 методы расширения могут применяться только к примитивным типам и интерфейсам;и что в C # 4 они могут быть использованы для расширения любого типа.Это не похоже на то, что я вижу сейчас, и мне трудно найти это документально.

Есть ли в этом какая-то правда или моя память все это выдумала?1004 * Какие правила касаются того, какие типы могут быть расширены?

Есть ли различия между C # 3 и 4?

Ответы [ 3 ]

6 голосов
/ 04 января 2011

Есть ли в этом правда?

номер

Какие правила касаются того, какие типы могут быть расширены?

Правила для вызовов приведены в разделе 7.6.5.2 спецификации C # 4. Правила для объявлений в разделе 10.6.9.

Чтобы ответить на ваш конкретный вопрос: неуправляемые типы указателей не могут быть расширены.

Есть ли различия между C # 3 и 4?

Да. C # 4 добавляет дополнительные правила для работы с «динамическим». Методы расширения не разрешаются динамически; если у вас есть

dynamic d = 10;
d.MyIntExtension();

тогда динамическая языковая среда выполнения не найдет метод расширения для int. Смотри

Будет ли ключевое слово dynamic в C # 4 поддерживать методы расширения?

для более подробной информации.

3 голосов
/ 04 января 2011

Есть ли в этом какая-то правда или моя память все это придумала?

Ты это выдумал.Методы расширений всегда использовались для IEnumerable<T>.


Редактировать:

Вот ссылка MSDN для Fx3.5 (C # 3), где 2-йНапример, расширение для System.String, а String не является примитивным типом.

3 голосов
/ 04 января 2011

Вы сделали это! Насколько я знаю, между C # 3 и C # 4 не было никаких изменений.

(И поверхностное сравнение соответствующих технических документов, кажется, подтверждает это.)

...