Можете ли вы переопределить частные виртуальные методы? - PullRequest
9 голосов
/ 16 марта 2010

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

Ответы [ 3 ]

53 голосов
/ 16 марта 2010

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

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

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

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

Test.cs (7,31): ошибка CS0621: 'Outer.Nested.Foo ()': виртуальный или абстрактные участники не могут быть приватными
Test.cs (3,26): ошибка CS0621: 'Outer.Foo ()': виртуальный или абстрактный участники не могут быть личным

5 голосов
/ 16 марта 2010

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

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

0 голосов
/ 09 января 2013

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

...