Почему метод Invoke сконструированного класса делегата является виртуальным?

Я видел в 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 похоже, что может. Но почему? Почему бы не создать запечатанный класс, чтобы не было штрафа за поиск виртуальных методов во время выполнения?

8
задан alpha-mouse 28 September 2011 в 19:19
поделиться