覆盖嵌套内部类中的运算符

时间:2014-06-29 03:40:27

标签: c# interface nested override access-levels

我需要在可访问性为Equals的嵌套类中覆盖GetHashcode运算符(因此,internal方法)。

当我尝试这样做时,编译器抱怨我无法使用public方法覆盖Equals - private成员。但是我无法覆盖public,因为类本身是internal,并且是嵌套的。

如何做到这一点?如何在非Equals(实际上是嵌套和GetHashcode)的类中覆盖publicinternal

1 个答案:

答案 0 :(得分:3)

  但是,我不确定它为什么会起作用。

此行为在C#规范的第3.5.2节中定义:

  

在程序M中的类型T中声明的嵌套成员P的可访问性域定义如下(注意M本身可能是一种类型):[。 ..]

     
      
  • 如果M的声明可访问性为internal,则M的辅助功能域是T的辅助功能域与{{1}的程序文本的交集。 }}。
  •   

此条款要求对于具有内部可访问性的类,类型成员可以等效地标记为公共或内部。

  

您不能拥有访问级别高于其包含类的成员吗?

这是准确的;规范的同一部分规定“成员的可访问域永远不会比声明成员的类型的可访问域更具包容性”。重要的是要认识到虽然该语言允许具有内部可访问性的类型的成员声明为公共,但它仍然具有内部可访问性(就好像它被声明为内部)。

换句话说,在下面的细分中,P的可访问性在两行中都是等效的:

X