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

Я думаю, что Вы можете и мой colleage думать, что Вы не можете!

9
задан Neil Knight 16 March 2010 в 16:34
поделиться

2 ответа

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

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()': виртуальные или абстрактные члены не могут быть частными

53
ответ дан 4 December 2019 в 05:56
поделиться

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

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

5
ответ дан 4 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: