Различия между методами расширения в 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 не является примитивным типом.