如
this question和
these
articles中所述,不允许以下内容:
public class A { protected virtual int X {get; private set;} } public class B : A { public int Add(A other) { return X + other.X; } }
因为如果是,你有这个:
public class C : A { protected override int X { get { return 4; } } }
然后:
A c = new C(); B b = new B(); b.Add(c);
这是非法的,因为即使B访问X意味着它知道C具有所需的签名,但仍然不允许实际访问该成员.
到现在为止还挺好.但鉴于上述情况,我很困惑的是为什么我能做到这一点:
public class A { protected virtual int X { get; private set; } public int Add(A other) { return X + other.X; } }
因此,这个:
A c = new C(); A a = new A(); a.Add(c);
definition of the protected keyword说:
A protected member is accessible within its class and by derived class instances.
但是现在C上的受保护成员正在从A中访问,它既不是“它的类”也不是“派生类实例”,而是父类.虽然A显然可以访问签名,但兄弟姐妹的例子似乎表明单独这一点不应该足够,那么为什么保护它授予它访问该成员?
解决方法
原文地址:https://www.jb51.cc/csharp/239160.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。