用户定义的结构是否继承了重载的==运算符?

use*_*769 2 .net c# struct operator-overloading

如果引用类型不重载相等运算符==,则将使用内置相等运算符on Object.为什么用户定义不一样structs:

struct A{ }

static void Main(string[] args)
{
    A a = new A();
    A a1 = new A();
    bool equal= (a == a1); //error
} 
Run Code Online (Sandbox Code Playgroud)

即,是否ValueType(所有structs派生的)也是过载运==算符?

dle*_*lev 5

这样的默认==运算符如何工作?对于引用类型,比较地址是合理的,但是因为对于两个ValueTypes,检查永远不会成立(因为如果两个ValueTypes在范围内,那么它们保证在堆栈上具有不同的位置),地址比较是没有意义的.

正如编译器已经有用地指出的那样,ValueType非常故意没有默认的==运算符.

  • “这样的默认 == 运算符如何工作?” - 通过调用默认的 Equals 成员。 (2认同)