值类型的Equals方法重载疑问
/// <summary>
     /// 名    称:<br>
     /// </summary>
     /// <remarks>
     /// 版    本:1.0<br>
     /// 作    者:<br>
     /// 创始时间:2011-11-1 10:04:00<br>
     /// 描    述:
     /// ----------修改记录------------<br>
     /// </remarks>
     struct MyValType
     {
         RefType refobj;
         ValType valobj;
         public override Boolean Equals(Object obj)
         {
             if (!(obj is MyValType)) return false;
             //调用类型安全的那个重载版本
             return this.Equals((MyValType)obj);
         }
         /// <summary>
         /// 实现一个强类型版本的Equals
         /// </summary>
         /// <param name="obj"></param>
         /// <returns></returns>
         public Boolean Equals(MyValType obj)
         {
             //比较引用类型字段
             if (!Object.Equals(this.refobj, obj.refobj)) return false;
             //比较引用类型字段
             if (!this.valobj.Equals(obj.valobj)) return false;
             return true;
         }
         public static Boolean operator ==(MyValType v1, MyValType v2)
         {
             return (v1.Equals(v2));
         }
         public static Boolean operator !=(MyValType v1, MyValType v2)
         {
             return !(v1==(v2));
         }
         public class RefType
         {
             public int Var;
         }
         public struct ValType
         {
             public int Var;
         }
     }
一、对于值类型,应该定义一个强类型版本的Equals方法,让其接受定义类型作为参数。这样做不仅可以提供类型安全,而且还可以避免额外的装箱操作。[为值类型实现Equals方法]
二、对于值类型,应该为其定义一个类型安全的Equals来比较对象的状态。然后在实现“非类型安全”的Equals时,在其内部调用类型安全的那个版本。还应该重载==和!=操作符,让他们调用类型安全的Equals方法(但由于可能的隐式转换带来的问题,所以这种做法是不被推荐的)[Equals方法与==/!=操作符的实现]
这是我在看。net框架程序设计时看到的一个疑问 但所有的值类型都是密封(seal)的,所以无法派生出新的值类型, 望高手指点(二)
------解决方案--------------------对象比较
等价与恒等
这里要注明一点Equals方法对于引用类型是比较两个变量是否引用了同一个对象,它是不管对象的值是否一致的,
但是,Equals方法对于值类型是比较两个值对象内的值是否相等。
------解决方案--------------------