Можно ли переопределить частные виртуальные методы?

Я думаю, что вы можете, и мой коллега думает, что вы не можете!

3 ответов


вы не можете даже объявить частные виртуальные методы. Единственный раз, когда это имело бы хоть какой-то смысл, был бы, если бы вы:

public class Outer
{
    private virtual void Foo() {}

    public class Nested : Outer
    {
        private override void Foo() {}
    }
}

... это единственный сценарий, в котором тип имеет доступ к закрытым членам своего родителя. Однако это все равно запрещено:


ваш коллега прав. Вы не можете объявить частные виртуальные методы, потому что нет смысла (поскольку их невозможно переопределить)...

но вы можете переопределить защищенные виртуальные методы.


вы не будете финансировать свой частный метод в своем производном классе. Таким образом, ключевое слово virtual не имеет sens в этом случае.