Я видел в CLR через C # и в статье codeproject Delegate Behind the Scenes , что, когда компилятор C # видит это
public delegate void MyDelegate(int intValue);
, он фактически генерирует что-то вроде этого
class MyDelegate : System.MulticastDelegate
{
public virtual void Invoke(Int32 intValue);
...
}
Вопрос есть, почему метод Invoke виртуальный ? Можно ли унаследовать этот сгенерированный тип делегата? С точки зрения CLR похоже, что может. Но почему? Почему бы не создать запечатанный класс, чтобы не было штрафа за поиск виртуальных методов во время выполнения?