对于类,==和!=使用object.ReferenceEquals。但是对于结构体,==和!=没有定义。为什么==和!=默认为ValueType的object.Equals?
struct S { }
S s1 = new S();
s1 is ValueType; // true
S s2 = new S();
object.Equals(s1, s2); // true
s1 == s2; // operator '==' cannot be applied.
ValueType等于的默认行为是反映在所有字段和检查相等,右..?那么为什么不将==和!=定义为仅使用object.Equals来构造结构?
然后我看看Mono中的System.Int32,看看他们做了什么.. Int32派生自IFormattable, IConvertible, IComparable, IComparable<Int32>, IEquatable<Int32>
,但它没有实现==和!= ...但仍然,==和!=可以是按预期使用整数。
在这些接口之一或内置的valuetypes上是否存在一些编译器魔法?还是我错过了一些关键的东西?
编辑:顺便说一下,原因==没有在结构上实现是出于性能的原因?使用反射遍历所有的字段可能会有点慢......?