你可以覆盖私有虚拟方法吗?

时间:2010-03-16 16:34:42

标签: c# virtual

我认为你可以和我的同事认为你不能!

3 个答案:

答案 0 :(得分:53)

您甚至无法声明私有虚拟方法。唯一有意义的是,如果你有:

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()':虚拟或抽象   成员不能           是私人的

答案 1 :(得分:5)

你的同事是对的。你不能声明私有虚方法因为没有意义(因为没有办法覆盖它们)......

但您可以覆盖受保护的虚拟方法。

答案 2 :(得分:0)

您在衍生课程中不会为私人方法提供资金。因此,在这种情况下,虚拟关键字没有敏感性。