我需要在可访问性为Equals
的嵌套类中覆盖GetHashcode
运算符(因此,internal
方法)。
当我尝试这样做时,编译器抱怨我无法使用public
方法覆盖Equals - private
成员。但是我无法覆盖public
,因为类本身是internal
,并且是嵌套的。
如何做到这一点?如何在非Equals
(实际上是嵌套和GetHashcode
)的类中覆盖public
和internal
?
答案 0 :(得分:3)
但是,我不确定它为什么会起作用。
此行为在C#规范的第3.5.2节中定义:
在程序
M
中的类型T
中声明的嵌套成员P
的可访问性域定义如下(注意M本身可能是一种类型):[。 ..]
- 如果
M
的声明可访问性为internal
,则M
的辅助功能域是T
的辅助功能域与{{1}的程序文本的交集。 }}。
此条款要求对于具有内部可访问性的类,类型成员可以等效地标记为公共或内部。
您不能拥有访问级别高于其包含类的成员吗?
这是准确的;规范的同一部分规定“成员的可访问域永远不会比声明成员的类型的可访问域更具包容性”。重要的是要认识到虽然该语言允许具有内部可访问性的类型的成员声明为公共,但它仍然具有内部可访问性(就好像它被声明为内部)。
换句话说,在下面的细分中,P
的可访问性在两行中都是等效的:
X