亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

C#中的類型相等與恒等(Equality & Identity)

2019-11-18 17:06:25
字體:
來源:轉載
供稿:網友

CLR提供了可以區分類型的Equality 和Identity能力。

l  Equality:如果兩個對象是相同的類型,并且它們各自帶有相同和等值的屬性。(They are instances of the same type and if each of the fields in one object matches the values of the fields in the other object)
Equality必須滿足三個必要條件:reflexive, symmetrics, and transitive
reflexive: 自身相等,及a==a 是永遠成立的;
symmetrics: 對象性,及a==b成立那么b==a 也成立;
transitive: 傳遞性,及a==b, b==c成立那么a==c 也成立。

l  Identity:兩個對象必須相等(意味著他們共享同一塊內存區域)(The two objects have the same values. – Two objects are identical if they share an address in memory)

CLR提供了至少四種方法來判斷兩個對象的等價性:

1.      Public static bool ReferenceEquals(object left, object right);

2.      Public static bool Equals(object left, object right);

3.      Public virtual bool Equals(object right);

4.      Public static bool Operator==(MyClass left, MyClass right);

ReferenceEquals方法總是用來判斷兩個對象的Identity的,不管是針對值類型還是引用類型。所以針對值類型,調用該方法總是會返回false,因為值類型作為這個方法的參數時會進行裝箱操作。

靜態的Equals方法提供了判斷兩個對象的Equality能力,在其實現的內部,調用了上述第三個虛擬的Equals方法。和ReferenceEquals一樣,它們已經具備從底層判斷兩個對象的能力,我們從來不會覆寫這兩個方法。

實例Equals方法也是用來區分兩個對象的Equality的。

l  對于引用類型的對象,它和ReferenceEquals方法幾乎是一樣的。(因為判斷兩個引用類型是否的Equality往往從Identity上就可以區分)

l  而值類型的對象,我們不僅要判斷他們具有相同的對象類型,還要判斷他們的值相等。值類型從System.ValueType繼承而來,ValueType已經重寫了Object.Equals()方法,本來已經可以用來滿足這些要求的。但是ValueType.Equals()方法不是很有效,因為它必須要通過反射,在不知道具體的派生類型中,完成對它們所含有成員變量的值的比較。因此,建議在我們實現一個值類型的數據結構時,同時重寫ValueType.Equals()方法。

l  然而我們再回頭看看引用類型,有時兩個引用類型的對象往往被用來進行類似值類型的比較,比如:String類型,它雖然是引用類型,但它也重寫了Equals方法,因為我們拿它來判斷兩個string是否相同(Equality),實際是希望判斷它們是否具有相同的內容,這是一個value semantics。因此,我們建議在考慮實現一個用作值語義環境下的引用類型時候,也重寫基類的Object.Equals()方法。

注:請參考MDSN或其它相關文檔,如何實現Equals方法的重寫。

上面的圖示給了很好的例子來區分Equals和ReferenceEquals方法,被用來做Equility和Identity判斷的區別。

==運算符是可由類重載的運算符,它也是用來判斷恒等的。
對于未重載==的引用類型,會比較兩個引用類型是否引用同一個對象。這跟引用類型的Equals()方法是一樣的。

對于未重載==的值類型,該運算符會比較這兩個值是否"按位"相等,即是否這兩個值中的每個字段都相等。和Equals方法一樣,推薦在自定義值類型中,也要重載==運算符,因為也存在反射在效率上的影響。

==運算符和Equals方法的區別在于多態表現上。Equals方法是重寫,而==運算符是被重載。這意味著除非編譯器知道調用具體的重載版本,否則它只是調用未重載的==版本。


參考資料:
《Essential .NET, Volume 1: The Common Language》 By DonBox, Chris Sells
《Applied Microsoft .NET Framework PRogramming》By Jeffrey Richter


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩不卡中文字幕| 亚洲国语精品自产拍在线观看| 亚洲日本中文字幕| 亚洲欧美日本伦理| 久久精品电影网站| 最近中文字幕日韩精品| 亚洲91av视频| 国产综合香蕉五月婷在线| 日本高清视频精品| 在线观看国产欧美| 日韩激情在线视频| 午夜精品久久久久久久白皮肤| 亚洲自拍av在线| 久久久精品一区二区| 亚洲自拍偷拍网址| 亚洲欧美制服综合另类| 国产精品视频一区国模私拍| 国模精品一区二区三区色天香| 久久中文字幕在线视频| 精品国产拍在线观看| 亚洲精品ady| 久久久女女女女999久久| 2019中文字幕在线免费观看| 国产成一区二区| 国产一区二区三区精品久久久| 亚洲精品v欧美精品v日韩精品| 久久精品视频中文字幕| 日韩在线视频免费观看高清中文| 午夜精品福利电影| 久久6精品影院| 国产精品女人久久久久久| www亚洲精品| 亚洲国产精品人人爽夜夜爽| 国产免费一区二区三区香蕉精| 黄色91在线观看| 亚洲另类欧美自拍| 在线看福利67194| 97视频在线播放| 亚洲九九九在线观看| 在线视频欧美日韩精品| 国产专区精品视频| 91国产中文字幕| 精品自在线视频| 亚洲在线免费视频| 97激碰免费视频| 国产精品999| 91色中文字幕| 欧美成人中文字幕| 国产精品入口免费视频一| 欧美乱妇高清无乱码| 日韩免费观看网站| 国产精品久久97| 98视频在线噜噜噜国产| 精品网站999www| 精品国偷自产在线视频99| 亚洲3p在线观看| 亚洲美女视频网| 中文字幕在线亚洲| 久久精品精品电影网| 欧美成人精品xxx| 日本一本a高清免费不卡| 欧美精品www在线观看| 最新中文字幕亚洲| 久久精品最新地址| 亚洲欧美精品在线| 日韩精品在线电影| 国产精品黄页免费高清在线观看| 亚洲欧洲日本专区| 国产视频亚洲精品| 国模叶桐国产精品一区| 777国产偷窥盗摄精品视频| 国产精品久久久久久中文字| 日韩电影免费在线观看中文字幕| 亚洲精品福利在线观看| 久久久久久亚洲精品中文字幕| 性日韩欧美在线视频| 亚洲精品第一国产综合精品| 亚洲欧洲日产国码av系列天堂| 亚洲激情中文字幕| 日韩成人激情视频| 亚洲网站在线观看| 亚洲在线免费视频| 久久久国产成人精品| 国产精品igao视频| 国语自产精品视频在线看抢先版图片| 中文字幕亚洲综合| 久久九九国产精品怡红院| 91在线|亚洲| 精品露脸国产偷人在视频| 日韩在线视频导航| 亚洲人成毛片在线播放| 日韩精品视频在线观看网址| **欧美日韩vr在线| 国产一区二区三区中文| 国产美女直播视频一区| 午夜精品久久17c| 亚洲精品之草原avav久久| 一区二区国产精品视频| 精品国产91久久久久久老师| 日本欧美爱爱爱| 日韩一级裸体免费视频| 亚洲精品www| 91精品国产高清久久久久久| 这里只有精品久久| 日韩精品视频免费| 亚洲а∨天堂久久精品9966| 97香蕉超级碰碰久久免费软件| 欧美一级bbbbb性bbbb喷潮片| 日本成人免费在线| 欧美日韩国产精品一区二区不卡中文| 亚洲欧美日韩国产中文专区| 欧美成年人视频| 国产xxx69麻豆国语对白| 日韩av资源在线播放| 这里只有精品在线观看| 欧美国产日韩一区二区在线观看| 国产精品视频不卡| 欧美伊久线香蕉线新在线| 国产91精品视频在线观看| 欧美日本国产在线| 成人亲热视频网站| 中文字幕精品一区二区精品| 海角国产乱辈乱精品视频| 国产婷婷97碰碰久久人人蜜臀| 91中文精品字幕在线视频| www.亚洲成人| 日韩精品福利在线| 伊人久久精品视频| 97精品久久久| 久久久国产精品一区| 高清一区二区三区四区五区| 欧美一区二区视频97| 国产精品视频一区国模私拍| 日韩精品视频在线观看免费| 久久久久久久久久久91| 亚洲精品福利资源站| 国产一区二区丝袜| 911国产网站尤物在线观看| 亚洲bt欧美bt日本bt| 久久久久久噜噜噜久久久精品| 欧美极品少妇xxxxⅹ免费视频| 国产成人欧美在线观看| 97成人精品视频在线观看| 日韩高清不卡av| 日本一区二区不卡| 日韩精品免费在线观看| 91夜夜揉人人捏人人添红杏| 国产精品成人av在线| 日韩欧美综合在线视频| 久久久之久亚州精品露出| 北条麻妃一区二区三区中文字幕| 日本19禁啪啪免费观看www| 7m第一福利500精品视频| 色999日韩欧美国产| 欧美亚洲成人免费| 久久久国产一区二区| 精品国偷自产在线| 色一情一乱一区二区| 日韩一区二区三区xxxx| 亚洲级视频在线观看免费1级| 欧美在线亚洲一区| 欧洲成人性视频| 久久久久北条麻妃免费看| 色樱桃影院亚洲精品影院|