Чтобы расширить ответ Джоэла - CLR долгое время поддерживал ограниченную дисперсию, но компилятор C # не использует их до 4.0 с новыми модификаторами "in" и "out" на универсальных интерфейсах и делегатах. Причины сложны, и я бы попал в беспорядок, пытаясь объяснить, но это не так просто, как кажется.
Превращение «защищенного внутреннего» метода в «публичный» метод; Вы можете сделать это с помощью метода скрытия:
public new void Foo(...) { base.Foo(...); }
(если аргументы и т. Д. Также общедоступны) - любое использование?