国产探花免费观看_亚洲丰满少妇自慰呻吟_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,因爲默認==是按引用來比較的,而匿名類型是不可能重載==


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凭祥市| 巢湖市| 香格里拉县| 抚宁县| 咸宁市| 丰都县| 武胜县| 山阳县| 祁阳县| 乌拉特后旗| 克山县| 合肥市| 鄂伦春自治旗| 嘉义市| 庐江县| 鹤峰县| 广州市| 黎川县| 石棉县| 特克斯县| 马山县| 周口市| 名山县| 涟水县| 北宁市| 个旧市| 沅江市| 卢氏县| 葫芦岛市| 潞西市| 盐山县| 贵州省| 灵宝市| 耿马| 渑池县| 茂名市| 扬中市| 巴里| 富顺县| 保康县| 青阳县|