Я видел в CLR через C# и в статье codeproject «Делегирование за кулисами», что когда компилятор C# видит это
Код: Выделить всё
public delegate void MyDelegate(int intValue);
на самом деле генерируется что-то вроде этого
Код: Выделить всё
class MyDelegate : System.MulticastDelegate
{
public virtual void Invoke(Int32 intValue);
...
}
Вопрос:
почему метод Invoke является виртуальным? Можно ли унаследовать этот сгенерированный тип делегата? С точки зрения CLR похоже, что это возможно. Но почему? Почему бы не создать запечатанный класс, чтобы не было штрафов за поиск виртуальных методов во время выполнения?
Подробнее здесь:
https://stackoverflow.com/questions/758 ... is-virtual