Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 重写嵌套内部类中的运算符_C#_Interface_Nested_Overriding_Access Levels - Fatal编程技术网

C# 重写嵌套内部类中的运算符

C# 重写嵌套内部类中的运算符,c#,interface,nested,overriding,access-levels,C#,Interface,Nested,Overriding,Access Levels,我需要在一个可访问性为internal的嵌套类中重写Equals运算符(因此,重写GetHashcode方法) 当我尝试这样做时,编译器抱怨我不能用private方法覆盖Equals(一个public成员)。但是我不能使覆盖公开,因为类本身是内部的,并且是嵌套的 如何做到这一点?在一个非public(实际上是嵌套的内部的)类中,如何重写Equals和GetHashcode 不过,我不知道它为什么有效 该行为在C#规范的§3.5.2中有定义: 程序p中类型T中声明的嵌套成员M的可访问域定义如下(注

我需要在一个可访问性为
internal
的嵌套类中重写
Equals
运算符(因此,重写
GetHashcode
方法)


当我尝试这样做时,编译器抱怨我不能用
private
方法覆盖Equals(一个
public
成员)。但是我不能使覆盖
公开
,因为类本身是
内部的
,并且是嵌套的

如何做到这一点?在一个非
public
(实际上是嵌套的
内部的
)类中,如何重写
Equals
GetHashcode

不过,我不知道它为什么有效

该行为在C#规范的§3.5.2中有定义:

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

  • 如果
    M
    的可访问性声明为
    internal
    ,则
    M
    的可访问域是
    T
    的可访问域与
    P
    的程序文本的交集
该规定要求,对于具有内部可访问性的类,类型成员可以等效地标记为public或internal

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

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

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

internal class A {public void X() {}}
internal class A {internal void X() {}}

你能把你试过的东西写出来吗。我希望这个问题足够笼统,可以有一个笼统的答案,比如“你需要创建一个接口的显式实现…”但是我不能公开重写,因为类本身是内部的,并且是嵌套的”-为什么?你试过了吗?哇。在尝试编写示例代码时,我确实尝试过,而且确实有效!不过,我不知道它为什么有效。通常,内部类中不能有公共成员,对吗?您不能拥有访问级别高于其包含类的成员?无论如何,我现在很高兴!但我不能回答问题或投票,因为我刚刚创建了我的帐户。