Можно ли встроить расширение статического класса?

У меня есть тенденция (вернуться к дням С++) добавлять встроенные подсказки к небольшим методам, например:

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void Add(this IProject @this, IComponent component)
{
    @this.Components.Add(component);
}

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


person Meirion Hughes    schedule 17.03.2015    source источник
comment
Вам действительно нужны эти микрооптимизации? Это больше не дни C++, вы можете доверять своему компилятору. Кроме того, подсказки по встраиванию обычно следует помещать в более крупные методы, которые, по вашему мнению, компилятор не будет встраивать. Но результат, вероятно, в любом случае находится в наносекундах.   -  person Pierre-Luc Pineault    schedule 18.03.2015
comment
Не лучше ли избавиться от этой привычки в первую очередь?   -  person Ondrej Tucny    schedule 18.03.2015
comment
Вопрос по-прежнему актуален, даже если мы не согласны с его вариантом использования.   -  person Grofit    schedule 18.03.2015
comment
Возможно нет. Но атрибут есть, функциональность есть. Законный вопрос.   -  person Meirion Hughes    schedule 18.03.2015
comment
Почему статические методы не подлежат встраиванию?   -  person Blorgbeard    schedule 18.03.2015
comment
Не сказал, что это неправомерный вопрос. Только то, что вы действительно должны переосмыслить свой сценарий с точки зрения обслуживания. Вы, вероятно, тратите больше времени на написание одного встроенного атрибута, чем он когда-либо сэкономит за всю жизнь вашей программы.   -  person Pierre-Luc Pineault    schedule 18.03.2015
comment
Стало плохой привычкой сомневаться в суждениях разработчиков, особенно когда речь идет об оптимизации. Есть много случаев, когда малейшая оптимизация имеет значение. C# не создавался с тем же мышлением, что и C++, но именно поэтому его нужно оптимизировать везде, где это возможно. Среди других областей C# теперь используется в игровой индустрии, где операции/вызовы могут достигать десятков тысяч и не в секунду, а со скоростью 60, даже 90 кадров в секунду. Спасибо за понимание.   -  person mireazma    schedule 06.08.2019


Ответы (1)


Статические методы могут быть встроенными. См. здесь информацию о том, как проверить, является ли метод встроенным. Методы расширения ничем не отличаются от обычных статических методов; в IL они просто украшены System.Runtime.CompilerServices.ExtensionAttribute, поэтому JIT будет обрабатывать их одинаково.

person Erik    schedule 17.03.2015