Различия между методами расширения в C#3 и 4

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

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

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

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

3 ответа

Решение

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

Нет.

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

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

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

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

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

dynamic d = 10;
d.MyIntExtension();

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

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

Больше подробностей.

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

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

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

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


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

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

Другие вопросы по тегам