c# - 为什么我不能覆盖嵌套类中的私有(private)成员?

标签 c# inheritance

在 C# 中,嵌套类可以访问包含类的私有(private)成员。

为什么我不能覆盖这些成员?为什么编译器会出错?

    private abstract class InheritanceTest
    {
        public virtual object Property
        {
            get { return null; }
            private set { }
        }

        public class Child : InheritanceTest
        {
            public override object Property
            {
                get { return null; }
                private set { base.Property = null; } // the base.Property = null statement here is just to show that there isn't an error message for accesing a parent private member.
            }
        }
    }

我得到的唯一错误信息是:

'Program.InheritanceTest.Child.Property.set': cannot override inherited member 'Program.InheritanceTest.Property.set' because it is not marked virtual, abstract, or override

编译器显然出错了,因为整个属性都被标记为虚拟的。 get 方法可以覆盖继承的成员。

C#规范的这一部分,只有错误信息是错误的吗?还是应该允许这样做?

我缺少规范的哪一部分? (或者缺少编译器?)

最佳答案

私有(private)虚拟方法和属性不能被覆盖:

You cannot use the virtual modifier with the static, abstract, private, or override modifiers. virtual (C# Reference)

另见 Can you override private virtual methods?

关于c# - 为什么我不能覆盖嵌套类中的私有(private)成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9050011/

相关文章:

c# - 使用 .net 从 Dell 机器获取服务标签?

c++ - 从自定义小部件继承

java - 如何通过多级extends来解析一个泛型?

C++ - 实例化派生类并使用基类的构造函数

c# - 根据提供的日期参数减去天数

c# - 双屏编程问题

c# - 配置管理器无法获取 ASP.net 5 中的连接字符串

C++父类调用子虚函数

java - 使用抽象类创建对象

c# - 使用 Linq 从对象属性列表中获取最小和最大时间值