国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Equals相關的一些要點

2019-11-17 02:49:17
字體:
來源:轉載
供稿:網友
Equals相關的一些要點

什麼時候需要覆蓋Equals?

自定義的值類型需要覆蓋,因爲框架默認的實現是基於反射的,效率不高。

自定義的引用類型要根據業務需要來決定是否提供覆蓋。

  

什麼時候需要覆蓋Operator==()?

自定義的值類型需要覆蓋,原因和Equals一樣。

自定義的引用類型一般不要覆蓋,因爲框架的默認語義是按引用比較。

  

如何正確的覆蓋Equals?

首先覆蓋Equals的同時還要覆蓋GetHashCode ,爲了確保唯一,可以使用System.Runtime.CompilerServices.RuntimeHelpers類的GetHashCode方法,它能夠返回AppDomain範圍內一個唯一ID

其次還要實現IEquatable<T>接口,該接口實現類型安全的比較

所以基本上一個標準實現如下:

class Foo : IEquatable<Foo>    {        public override int GetHashCode()        {            //add logic here...                         }        public override bool Equals(object obj)        {            if (obj == null) return false;            if (object.ReferenceEquals(this, obj)) return true;            if (this.GetType() != obj.GetType()) return false;            return this.Equals(obj as Foo);        }        public bool Equals(Foo other)        {            //add logic here...                         }    }

  

什麼時候需要實現IStructuralEquatable?

自定義的集合對象或者組合對象可以考慮實現該接口,以實現基於內容的比較。

框架默認爲數組和元組提供了該接口的實現,這樣就不會衹按引用比較,而是按內部元素的值進行比較。

 

編譯器爲匿名類型重寫了Equal方法,所以用Equal比較兩個相同的匿名對象會得到true; 但直接用==比較則得到false,因爲默認==是按引用來比較的,而匿名類型是不可能重載==


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 清原| SHOW| 阿拉尔市| 班玛县| 永丰县| 玉田县| 常熟市| 太白县| 石林| 庐江县| 仙居县| 奉化市| 天镇县| 拜城县| 遂宁市| 登封市| 黔西县| 莱西市| 稷山县| 色达县| 阜新市| 剑阁县| 阿瓦提县| 尤溪县| 珠海市| 唐山市| 依兰县| 佛坪县| 山西省| 徐州市| 板桥市| 左权县| 兴化市| 遂平县| 海伦市| 玉环县| 西乌| 岑巩县| 泰安市| 洪洞县| 涟源市|