品牌形象网站源码北京网站优化企业
品牌形象网站源码,北京网站优化企业,厦门 网站设计,网站文案案例建议11#xff1a; 区别对待和Equals在开始本建议之前#xff0c;首先要明确概念“相等性”。CLR中将“相等性”分为两类#xff1a;“值相等性”和“引用相等性”。如果用来比较的两个变量所包含的数值相等#xff0c;那么将其定义为“值相等性”#xff1b;如果比较的两… 建议11 区别对待和Equals在开始本建议之前首先要明确概念“相等性”。CLR中将“相等性”分为两类“值相等性”和“引用相等性”。如果用来比较的两个变量所包含的数值相等那么将其定义为“值相等性”如果比较的两个变量引用的是内存中的同一个对象那么将其定义为“引用相等性”。无论是操作符“”还是方法“Equals”都倾向于表达这样一个原则对于值类型如果类型的值相等就应该返回True。对于引用类型如果类型指向同一个对象则返回True。下面的代码输出所遵循的就是以上原则static void ValueTypeOPEquals()
{ int i 1; int j 1; //True Console.WriteLine(i j); j i; //True Console.WriteLine(i j);
} static void ReferenceTypeOPEquals()
{ object a 1; object b 1; //False Console.WriteLine(a b); b a; //True Console.WriteLine(a b);
} static void ValueTypeEquals()
{ int i 1; int j 1; //True Console.WriteLine(i.Equals(j)); j i; //True Console.WriteLine(i.Equals(j));
} static void ReferenceTypeEquals()
{ object a new Person(NB123); object b new Person(NB123); //False Console.WriteLine(a.Equals(b)); b a; //True Console.WriteLine(a.Equals(b));
}
但是我们同时也要了解无论是操作符“”还是“Equals”方法都是可以被重载的。比如对于string这样一个特殊的引用类型微软觉得它的现实意义更接近于值类型所以在FCL中string的比较被重载为针对“类型的值”的比较而不是针对“引用本身”的比较。从设计上来说很多自定义的类型尤其是自定义的引用类型会存在和string类型比较接近的情况。如例子中所举的类型Person在现实生活中如果两者的IDCode是相等的我们就认为两者是同一个人这个时候就要重载Equals这个方法代码如下所示class Person
{ public string IDCode { get; private set; } public Person(string idCode) { this.IDCode idCode; } public override bool Equals(object obj) { return IDCode (obj as Person).IDCode; }
}
这时再通过Equals去比较两个具有相同IDCode的Person对象的值返回的就会是true代码如下所示object a new Person(NB123);
object b new Person(NB123);
//False
Console.WriteLine(a b);
// True
Console.WriteLine(a.Equals(b));
这里再引出操作符“”和“Equals”方法之间的一点区别。一般来说对于引用类型我们要定义“值相等性”应该仅仅去重载Equals方法同时让“”表示“引用相等性”。注意 由于操作符“”和“Equals”方法从语法实现上来说都可以被重载为表示“值相等性”和“引用相等性”。所以为了明确有一种方法肯定比较的是“引用相等性”FCL中提供了Object. ReferenceEquals方法。该方法比较的是两个示例是否是同一个示例。 转载于:https://www.cnblogs.com/xust/articles/3081355.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/86059.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!