为什么编译器认为两个空类是不同的?

Mas*_*uri -6 c#

为什么编译器认为这两个类不同?

public class A()
{
}

public class B()
{
}
Run Code Online (Sandbox Code Playgroud)

我觉得这个问题真的很可笑。但我想知道编译器确定它们不同的核心原因是什么。有没有人可以告诉我编译器背面发生了什么。

谢谢你。

Mik*_*e S 5

这里的概念是“结构类型等价”(https://en.wikipedia.org/wiki/Structural_type_system)。如果两种类型在“结构上”相等,即如果它们具有相同的成员,则某些语言认为它们是相等的。

JScript 使用结构等效。

C#/C++/Java 没有——仅仅因为两种类型具有相同的形状并不使它们等效。关于强类型优于结构等价的一些原因:

  1. 这对于强类型检查很有用,并确保类型不会因为巧合具有相同的形状而意外地相互分配。
  2. 一旦图片中有私有成员和多态性,“相同形状”可能更难确定。
  3. 它允许对执行进行重大优化。