Если статический класс содержит метод расширения, то он помечается атрибутом ExtensionAttribute, при вызове метода расширения над типом, когда компилятор видит вызов метода он сначала просматривает все внутренние методы, и если не находит соответсвующий, то компилятор ищет все классы помеченные атрибутом ExtensionAttribute, а в этих классах методы первый параметр которых передан с ключевым словом this, а тип первого аргумента соответсвует типу на котором вызван статический метод
Нет, вызов extension метода в CLR, записывается инструкцией call, которая не генерирует NRE, если вызывается на null (первый аргумент - this == null), поэтому метод расширения может быть вызван на null
При создании action принимает два параметра - первый это контекс (на чем он вызывается), второй - само тело метода, при таком вызове
"qwew" - контекст на котором будет вызван action, таким образом мы получаем уже созданный action, который остается только вызвать, при обычном вызове статического метода (без передачи контекста), генерируется делегат с контекстом null
- Нельзя создавать public extension методы на типе object или , потому что они загрязняют intellisense
- Extension методы из другой сборки видны только если исходная сборка ссылается на нее
- Если компилятор найдет два одинаковых методов расширения, то не получится вызвать их через Fluent Api, придется явно указать имя класса в котором содержится метод и сам метод, туда передать аргументы
- Если вы определили свой extension метод, а потом автор библиотеки в следующей версии создаст такой же метод в типе, над котором вы определили свой extension, то вызов вашего метода будет подменен вызовом метода класса(потому что методы внутри класса имеют приоритет перед extension методам)
Partial Плюс partial методов в том, что их можно не объявлять, т.е задавать только объявление без тела, а тело реализовать в другой части partial класса, таким образом можно объявить partial метод без тела, использовать его в автосгенерированном коде, и если программист не заполнит его, то он просто не вызовется(это работает только для void методов, не принимающих out параметров, потому что вызывающий код сможет работать если partial метод - void, но не сможет если метод должен вернуть какое-то значение
Он вообще не генерирует этот код, игнорируя вызов метода
Они должны возвращать void и не принимать out параметров Объявляются только в partial классе partial методы должны быть идентичными по сигнатуре, partial метод может иметь только одну реализацию