3

我需要在可访问性Equals为.GetHashcodeinternal

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

如何做到这一点?我怎样才能在一个不是(实际上是嵌套的 and )的类中覆盖Equalsand ?GetHashcodepublicinternal

4

1 回答 1

3

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

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

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

  • 如果声明的可访问性Minternal,则可访问域是可访问域与 的程序文本的M交集。TP

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

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

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

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

internal class A {public void X() {}}
internal class A {internal void X() {}}
于 2014-06-29T04:33:41.507 回答