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

首頁 > 編程 > C# > 正文

C#中Equals方法的常見誤解

2020-01-24 01:25:06
字體:
來源:轉載
供稿:網友

很多C#的教材都會強調對象相等的概念。我們都知道,在C#的世界里存在兩種等同性。一種是邏輯等同性:如果兩個對象在邏輯上代表同樣的值,則稱他們具有邏輯等同性。另一種是引用等同性:如果兩個引用指向同一個對象實例,則稱他們具有引用等同性。

眾所周知,Object類型有一個名為Equals的實例方法可以用來確定兩個對象是否相等。Object的Equals的默認實現比較的是兩個對象的引用等同性。而Object的派生類ValueTpye重寫了Equals方法,它比較的是兩個對象的邏輯等同性。

也就是說,在C#里,引用類型的默認Equals版本關注的是引用等同性,而值類型關注的是邏輯等同性。當然,這并不總能滿足我們的要求。所以每當我們更在意引用類型的邏輯等同性的時候,我們就應該重寫Equals方法。

重寫引用類型的Equals方法以改變其默認的比較方式的一個著名例子是String類。當我們寫出“string1.Equals(string2)”這樣的代碼時,我們比較的不是string1和string2這兩個引用所指向的是否為同一個實例(引用等同性),而是比較string1與string2所包含的字符序列是否相同(邏輯等同性)。

誤解一:Equals方法和operator==具有相同的默認行為。

對于引用類型,如果沒有為它重載==操作符,且其父類型也沒有重寫Equals方法,則這個引用類型Equals方法和operator==具有相同的默認行為,即它們比較的都是對象的引用等同性。然而對于值類型來說,就完全不是這么回事了!因為如果你沒有為自定義值類型重載operator==的話,就不能寫這樣的代碼“myStruct1 == myStruct2”,否則會得到一個編譯錯誤,原因是值類型沒有相等操作符重載的默認實現。

誤解二:自定義類的Equals的方法默認實現將自動調用operator==方法,或operator==方法的默認實現將自動調用Equals方法。

經常聽到有人說某某類型是引用類型,所以它的Equals方法的默認實現將自動調用operator==方法。這種說法完全是沒有道理的。正如上文所說的,引用類型Equals方法的默認實現來自Object,而值類型的默認實現來自TypeValue,就算他們會使用==操作符,使用的也是Object或TypeValue的重載版本。

原則上來說,只要我們沒有重寫一個類的Equals方法,那么它就會繼承其父類的實現,而父類是沒有機會使用子類型的操作符重載的。同樣,只要我們沒有在一個類的==操作符重載中調用Equals方法,它是不會自動調用的。

誤解三:值類型的默認Equals實現是對兩個對象進行逐位比較的。

有些人認為值類型的Equals默認實現就是通過比較兩個對象在內存中的位表示,即如果所有的二進制位都相等,則說明這兩個對象“等同”。這是不準確的。因為其實值類型的Equals默認實現是對值類型的每個字段都調用該字段類型的Equals方法,如果所有字段的Equals方法都返回true,則他們才可能相等。來看一個例子:

class MyClass { public override bool Equals(object obj) { Console.WriteLine("MyClass的Equals方法被調用了。"); return true; } } struct MyStruct { public MyClass Filed; } class Program { static void Main(string[] args) { MyStruct a; MyStruct b; a.Filed = new MyClass(); b.Filed = new MyClass(); Console.WriteLine(a.Equals(b)); } } 

很顯然,a和b擁有完全不同的二進制位表示。但是最終打印的結果是:

MyClass的Equals方法被調用了。 True 

這說明值類型的默認實現是通過調用字段的Equals方法來確定兩個對象是否相等,而不是通過比較他們的二進制位是否一致來確定的。

誤解四:Equals是非?;?、非常常用的方法,所以其默認的實現不存在性能問題。

對于引用類型,Equals的默認實現很簡單,僅僅需要判斷兩個引用是不是同一種類型、兩個引用指向的是不是同一塊內存就可以了。所以其性能也沒有問題。但是對于值類型,Equals的任務就沒有這么簡單了。它需要對兩個對象的所有字段都做出比較,即逐字段調用字段類型的Equals。

由于在ValueType(值類型Equals方法默認實現的位置)中,不可能知道它所有的子類型都包含哪些字段,所以為了調用子類型字段的Equals方法,ValueType的Equals就需要使用反射技術。您可能已經看出來了,反射并不是一種性能友好的技術,所以值類型的Equals方法算不上高效。這也正是為什么微軟推薦我們為自定義值類型重寫Equals方法的原因。

通過本文對Equals的介紹,希望對你有幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97精品欧美一区二区三区| 日韩欧美国产骚| 日韩精品中文字幕有码专区| 中文字幕精品影院| 精品香蕉一区二区三区| 久久久噜噜噜久久中文字免| 韩国19禁主播vip福利视频| 91久久久久久久久久久久久| 欧美视频在线看| 久久综合免费视频影院| 成人a级免费视频| 68精品久久久久久欧美| 国产91精品久| 欧美一级免费视频| 97超级碰碰人国产在线观看| 亚洲欧美中文日韩在线v日本| 九九热精品视频国产| 亚洲无限av看| 国产亚洲精品久久久| 亚洲国内高清视频| 国产精品久久久久久av福利软件| 色综久久综合桃花网| 欧美裸体xxxx极品少妇| 国产亚洲欧美另类中文| 日本三级久久久| 久久久久久久香蕉网| 国产精品福利在线观看网址| 欧美性极品xxxx娇小| 午夜精品久久久久久99热| 伊人久久久久久久久久久| 国产日本欧美一区二区三区| 国产91在线播放| 97av视频在线| 在线免费观看羞羞视频一区二区| 日韩免费看的电影电视剧大全| 精品国产精品三级精品av网址| 欧美激情中文字幕在线| 国产精品99免视看9| 狠狠色噜噜狠狠狠狠97| 国产免费久久av| 在线观看成人黄色| 国产亚洲精品美女久久久| 久久久国产成人精品| 日韩精品免费在线视频| 亚洲一区二区免费| 国产成人高清激情视频在线观看| 欧美国产日产韩国视频| 亚洲欧美另类人妖| 97人洗澡人人免费公开视频碰碰碰| 91美女片黄在线观| 亚洲图片欧美日产| 欧美有码在线视频| 久久久久国产精品一区| 91精品久久久久久久久不口人| 亚洲天堂男人天堂女人天堂| 精品无人区乱码1区2区3区在线| 在线a欧美视频| 欧美综合在线第二页| 亚洲精品国产suv| 亚洲人高潮女人毛茸茸| 日韩精品中文字幕在线观看| 欧美日韩激情网| 精品国产一区二区三区久久久| 国产精品精品视频一区二区三区| 欧美日韩国产综合新一区| 国产美女精品免费电影| 欧美日韩综合视频网址| 国产成人精品a视频一区www| 亚洲国产精品一区二区三区| 日韩在线观看高清| 精品国产自在精品国产浪潮| 精品久久中文字幕久久av| 国产一区欧美二区三区| 欧美激情视频一区| 日韩欧美视频一区二区三区| 91久久夜色精品国产网站| 中文字幕亚洲欧美日韩在线不卡| 成人免费淫片视频软件| 国产视频在线观看一区二区| 狠狠久久五月精品中文字幕| 狠狠躁夜夜躁人人爽超碰91| 69av在线播放| 国产精品入口免费视| 国产成人精品在线观看| 2018日韩中文字幕| 一区二区三区高清国产| 欧美大片在线看免费观看| 欧美色道久久88综合亚洲精品| 国产精品av在线| 欧美日韩激情小视频| 日韩激情第一页| 欧美日韩久久久久| 性色av一区二区三区红粉影视| 欧美视频免费在线观看| 亚洲网站视频福利| 国产午夜精品免费一区二区三区| 欧美日韩中国免费专区在线看| 日韩久久午夜影院| 国产精品主播视频| 久久久久久尹人网香蕉| 日韩免费电影在线观看| 欧美裸体男粗大视频在线观看| 中文字幕av一区二区| 日韩天堂在线视频| 日韩美女在线观看| 亚洲美女av黄| 精品呦交小u女在线| 久久国产精品久久久久久| 国产精品永久免费| 国产成人精品久久二区二区91| 伊人亚洲福利一区二区三区| 国产精品扒开腿做| 欧美在线一区二区视频| 欧美成人亚洲成人| 亚洲一区二区三区四区视频| 亚洲精品国产拍免费91在线| 蜜臀久久99精品久久久无需会员| 亚洲一区二区三区香蕉| 欧美做受高潮1| 国产91精品不卡视频| 亚洲风情亚aⅴ在线发布| 91精品视频观看| 亚洲国产成人在线播放| 亚洲免费av网址| 欧美高清视频在线播放| 亚洲缚视频在线观看| 全色精品综合影院| 7777精品久久久久久| 色综合久久88色综合天天看泰| 久久91超碰青草是什么| 日韩高清a**址| 欧美成人高清视频| 精品一区电影国产| 色无极影院亚洲| 亚洲国产精品系列| 亚洲成人a级网| 成人动漫网站在线观看| 亚洲第一福利网| 日韩在线观看高清| 992tv成人免费影院| 亚洲欧美在线播放| 中文字幕精品www乱入免费视频| 中文字幕日韩欧美精品在线观看| 深夜精品寂寞黄网站在线观看| 久久精品国产亚洲| 欧美成人sm免费视频| 久久国产精彩视频| 国产97人人超碰caoprom| 久久人人爽人人爽人人片av高请| 日韩成人在线免费观看| 亚洲999一在线观看www| 日韩av三级在线观看| 日韩av电影手机在线观看| 51ⅴ精品国产91久久久久久| 国产成人精品一区二区在线| 国产成人精品国内自产拍免费看| 久久久视频在线| 欧美日韩国内自拍| 国产97在线观看| 国产精品福利在线| 日韩国产精品一区| 日韩欧美成人免费视频| 亚洲美女视频网| 亚洲自拍另类欧美丝袜|