C# 3 принес нам методы расширения.Являются ли методы расширения языковой функцией или языком CLR?
Однако другие языки, такие как VB.NET, также реализуют методы расширения путем указания объявления атрибута поверх метода, который должен быть объявлен в модуле VB.NET.
Кроме того, вы можете использовать методы расширения в C++/CLI.
Итак, мне интересно, являются ли методы расширения языковой функцией или функцией, встроенной в среду CLR?
Я предполагаю, что это трюк компилятора, поскольку вы можете даже вызывать их как простые статические методы типов, в которых они объявлены, и поэтому должны быть специфичными для языка (и должны быть реализованы Microsoft в VB.NET, C# и C++ расширения только ради единства, но не нужны для любого другого языка, который хочет настроить таргетинг на CLR), но я не мог быть уверен.
на любой версии .NET Framework, даже те «перед «были добавлены методы расширения, просто создав соответствующий атрибут в вашем решении. – vcsjones
Спасибо, @dvnrrs. Итак, если я создаю абстрактное дерево синтаксиса (AST), скажем, используя System.CodeDOM, простого статического класса, который имеет один статический метод, но без первого параметра с префиксом ключевого слова this, но вместо этого применяет объявление ExtensionAttribute на статический метод, а затем я скомпилирую AST с помощью компилятора C#, он не будет генерировать метод расширения, правильно? –
@ WaterCoolerv2 Я думаю, что это ... ExtensionAttribute будет единственной разницей на уровне IL между регулярной статической функцией, которая принимает аргумент типа 'T' и метод расширения типа T. Я отправил IL-дамп выше моего метода расширения образца, чтобы вы могли посмотреть. – TypeIA