Являются ли примеры DOC для CA1859: используйте конкретные типы, когда это возможно для улучшения производительности, прC#

Место общения программистов C#
Ответить
Anonymous
 Являются ли примеры DOC для CA1859: используйте конкретные типы, когда это возможно для улучшения производительности, пр

Сообщение Anonymous »

Пример, приведенный для CA1859: используйте бетонные типы, когда это возможно, для улучшения производительности: < /p>

Код: Выделить всё

abstract class A
{
public virtual void M() { }
}

sealed class B : A
{ }

internal class C
{
private readonly A _a = new B();

public void Trigger()
{
// This performs a virtual call because
// _a is defined as an abstract class.
_a.M();
}
}
< /code>
и исправленный код: < /p>
abstract class A
{
public virtual void M() { }
}

sealed class B : A
{ }

internal class C
{
private readonly B _b = new B();

public void Trigger()
{
_b.M();
}
}
< /code>
Но в обоих случаях Callsite в IL выглядит как (.net 8) < /p>
IL_0006: callvirt instance void A::M() /* 06000011 */
Я что -то упускаю, или пример/отсутствие предупреждения для второго случая просто неправильно? /> Компилятор может реализовать вызов метода (в большинстве случаев), используя IL Инструкция вместо инструкции CallVirt IL. Это
связано с тем, что цель метода не может быть переопределена. (Даже если есть b.m () , компилятор генерирует Callvirt )

Подробнее здесь: https://stackoverflow.com/questions/796 ... r-improved
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»