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

首頁(yè) > 編程 > C# > 正文

重載Object的虛方法——重載Equals和運(yùn)算符

2023-05-09 18:58:30
字體:
供稿:網(wǎng)友

Object是所有類的頂級(jí)父類,而Object又提供了四個(gè)虛方法:

Equals , GetHashCode, ToString, Finalize。

那么在這個(gè)系列文章中,我們就看下,我們對(duì)這四個(gè)方法的利用。

首先是引用類型重載Equals,我分成三步:

1. 空值驗(yàn)證

2. 類型驗(yàn)證

3. 比較驗(yàn)證

代碼如下:

class Person{    public string Name { get; set; }    public int Age { get; set; }    public City MyCity { get; set; }    public override bool Equals(object obj)    {        if (obj == null)         {             return false;         }        if (obj.GetType() != this.GetType())         {             return false;         }        Person personTemp = obj as Person;        if (!Object.Equals(this.MyCity, personTemp.MyCity))        {            return false;        }        if (this.Age != personTemp.Age || this.Name != personTemp.Name)        {            return false;        }        return true;    }}

 在此需要注意的是,在比較引用類型屬性的值是,需要使用Object的靜態(tài)方法去比較,主要是為了防止屬性值為null而拋出異常。我們來看下Object的靜態(tài)Equals實(shí)現(xiàn)就明白了:

public static bool Equals(object objA, object objB){    return ((objA == objB) || (((objA != null) && (objB != null)) && objA.Equals(objB)));}

 呵呵,很漂亮的實(shí)現(xiàn)。解釋一下,其實(shí)就是首先比較兩者是否指向同一塊引用,然后判斷兩者是否都不為空,最后來調(diào)用類型的Equals重載方法。

接下來,我們看下,如果這個(gè)時(shí)候我們實(shí)現(xiàn)了一個(gè)Person類的子類,我們?cè)撛趺磳懀?/font>

class Programmer:Person{    public int CodeRowCount { get; set; }    public override bool Equals(object obj)    {        if (!base.Equals(obj)) { return false; }        Programmer pTemp = (Programmer)obj;        if (pTemp.CodeRowCount != this.CodeRowCount) { return false; }        return true;    }}

 來簡(jiǎn)單解釋一下,由于Person已經(jīng)判斷了obj是否為空啊,類型是否相等,基類的字段是否相等,因此我們不需要再操心了,我們只需要比較子類獨(dú)有的字段是否相等即可。

這里我們強(qiáng)調(diào)下,在Object默認(rèn)的Equals實(shí)現(xiàn)中,比較的是兩個(gè)對(duì)象是否指向了同一個(gè)引用,因此,如果我們的父類沒有重載Equals方法,那么我們的這個(gè)版本將永遠(yuǎn)都是錯(cuò)誤的,因此,我們也可以看出實(shí)現(xiàn)Equals方法的重要性吧,呵呵!

最后是值類型(主要是結(jié)構(gòu)體)的重載Equals的方法,首先讓我們看看所有值類型的父類System.ValueType對(duì)于Equals的實(shí)現(xiàn):

public override bool Equals(object obj){    if (obj == null)    {        return false;    }    RuntimeType type = (RuntimeType)base.GetType();    RuntimeType type2 = (RuntimeType)obj.GetType();    if (type2 != type)    {        return false;    }    object a = this;    if (CanCompareBits(this))    {        return FastEqualsCheck(a, obj);    }    FieldInfo[] fields = type.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);    for (int i = 0; i < fields.Length; i++)    {        object obj3 = ((RtFieldInfo)fields[i]).InternalGetValue(a, false);        object obj4 = ((RtFieldInfo)fields[i]).InternalGetValue(obj, false);        if (obj3 == null)        {            if (obj4 != null)            {                return false;            }        }        else if (!obj3.Equals(obj4))        {            return false;        }    }    return true;}

 方法很長(zhǎng),我來解釋一下:

首先,依然是來判斷obj是否為空;

接下來,來得到兩個(gè)對(duì)象的類型,在這里出現(xiàn)了一個(gè)類是RuntimeType,我們Reflector下這個(gè)類:

是一個(gè)Internal類型,程序集外無(wú)法訪問,但是我們通過名稱和其中的屬性和方法名大概可以猜出,這是一個(gè)用于針對(duì)運(yùn)行時(shí)反射而專門設(shè)計(jì)的類型。

接下來出現(xiàn)了CanCompareBits,FastEqualsCheck這兩個(gè)方法,在Reflector中無(wú)法看到實(shí)現(xiàn),但是根據(jù)方法名,我猜想應(yīng)該是判斷這個(gè)對(duì)象是否可以按位比較(我不是很理解,是指的序列化么?),如果可以的話,直接按位比較,這樣的效率會(huì)比較高。(個(gè)人猜測(cè),希望大家指點(diǎn))

最后就是通過反射得到該對(duì)象中所有的屬性,然后一一比較,不再贅述。

由此我們可以得知,System.ValueType以及為我們提供了很完善的實(shí)線,我們幾乎不需要為之操心了,不過我們應(yīng)該想到,在基類的實(shí)現(xiàn)中,這樣的反射必定會(huì)浪費(fèi)性能。那么我們的辦法是為我們的結(jié)構(gòu)體專門定制一個(gè)強(qiáng)類型的Equals方法:

struct ITWorker{    public string name;    public int age;    public City city;    public override bool Equals(object obj)    {        if (! (obj is ITWorker)) { return false; }        return this.Equals((ITWorker)obj);    }    private bool Equals(ITWorker worker)    {        if (!Object.Equals(this.city, worker.city))        {            return false;        }        if (!this.name.Equals(worker.name) || ! (this.age != worker.age))        {            return false;        }        return true;    }}

 合理重載了Equals方法后,我們的事情還不算結(jié)束,我們知道,C#提供了重載運(yùn)算符的功能,而==和!=也經(jīng)常被人所使用,而且經(jīng)常用于和Equals相同的場(chǎng)合。那么我們就有必要再重載Equals的同時(shí),重載運(yùn)算符。

public static bool operator ==(Person p1, Person p2){    return p1.Equals(p2);}public static bool operator !=(Person p1, Person p2){    return !(p1.Equals(p2));}

 就是這么簡(jiǎn)單。OK。原以為大功告成了,可是看看我的代碼卻發(fā)現(xiàn)了我的Person下出現(xiàn)了讓我頭疼的波浪線。提示的意思是說,我重載了Equals方法,但是卻沒有重載GetHashCode方法。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
成人国产亚洲精品a区天堂华泰| 日韩大片免费观看视频播放| 少妇人妻偷人精品一区二区| 欧美黑人性生活视频| 久操视频在线| 日韩中文字在线| 国产综合无码一区二区色蜜蜜| 欧美日韩在线视频一区二区| 欧美日韩日日摸| 成人av午夜电影| 久久久久五月天| 国产成人免费视频一区| 欧美亚洲国产精品久久| 亚洲xxxxx| 国产日产久久高清欧美一区| 日韩av黄色| 9.1片黄在线观看| 午夜久久久久久久久| 一区二区视频在线免费观看| 精品自拍偷拍| 欧美xxbbb1手交| 国产男女免费视频| 黄色大片在线免费观看| 久久久久久久性| 自拍偷拍亚洲天堂| 欧美一区二区视频免费观看| www.aqdy爱情电影网| 黄色片网站在线播放| 国产一区二区三区在线| www.看毛片| 成人看片黄a免费看在线| 精品久久久久久综合日本| 黄色网页在线免费看| 成人写真视频福利网| www.日本三级| 亚洲午夜伦理| 亚洲激情文学| а√天堂资源国产精品| 四虎免费播放| 日韩av密桃| 国产精品后入内射日本在线观看| 男人日女人网站| 国产激情久久久| 国产精品传媒毛片三区| 午夜日韩福利| 精品人妻一区二区三区三区四区| videoxxxx另类日本极品| 国产精品视频白浆合集| 日本道在线视频| 国产在线精品一区二区不卡了| 一区二区亚洲欧洲国产日韩| 国产精品色午夜在线观看| 中文字幕一区二区三区四| 国产精品久久占久久| 亚洲一区二区五区| 成人国产免费电影| a片在线免费观看| 无码人妻aⅴ一区二区三区| 亚洲国产精华液网站w| 欧美一区二区女人| 亚洲一区二区天堂| 国产一区二区三区久久精品| 2020国产精品极品色在线观看| 久久精品老司机| 亚洲色图欧美偷拍| v天堂福利视频在线观看| 夜夜嗨av一区二区三区网站四季av| av手机免费看| 99久久99久久精品免费观看| 欧美一级在线免费| 88xx成人精品| 尤物九九久久国产精品的分类| 日韩av一区二区在线观看| 精品少妇一区二区三区在线视频| 99视频精品全部免费在线| 欧美一区二区三区激情| 日中文字幕在线| 色婷婷综合在线观看| 黑人精品无码一区二区三区AV| 女同毛片一区二区三区| 亚洲自拍中文字幕| 疯狂欧美牲乱大交777| 国产成人午夜99999| 欧美高清视频在线高清观看mv色露露十八| 91插插插插插插| 中文字幕高清视频| 韩国一区二区电影| 777片理伦片在线观看| 国产精品一线二线三线| 欧美日韩亚洲网| 中文幕av一区二区三区佐山爱| 一级黄色片免费| 免费看国产精品一二区视频| 嘿嘿视频在线观看| 亚洲va欧美va国产综合剧情| 99国产精品99久久久久久| 欧美日韩国产小视频在线观看| 91精品久久久久久久久99蜜臂| 久久久精品人妻一区二区三区四| 青花影视在线观看免费高清| 夜夜添无码一区二区三区| 日韩av一区二区在线| 二区在线播放| 中文字幕人成一区| 国产69精品久久久久按摩| 外国成人直播| www.九九热.com| 虎白女粉嫩尤物福利视频| 美女日韩在线中文字幕| 国产原创一区二区| 欧美日韩国产123区| 成年网站在线观看视频| www.色综合.com| 国产亚洲一二三区| 一区二区三区成人| 国产欧美精品日韩区二区麻豆天美| 亚洲精品在线三区| 国产99久久久久久免费看农村| 亚洲自拍欧美精品| 在线观看不卡的av| 九九视频精品全部免费播放| 嫩草影院在线观看未满十八| 少妇光屁股影院| 欧美成人性福生活免费看| 日本xxxwww免费视频| 欧美精品一区二区三区国产精品| 99久久久无码国产精品免费蜜柚| 久久青青色综合| 精品少妇av| 国产又粗又猛又色又| 蜜桃狠狠色伊人亚洲综合网站| 国产精品久久亚洲不卡| 国产精品一区二区三区美女| 日韩成年人视频| 99伊人成综合| 26uuu另类亚洲欧美日本一| 久久五月婷婷丁香社区| 欧美做受高潮电影o| 国产91一区二区三区| 欧美激情亚洲天堂| 91精品一区二区| 多人欧美交性姿势| 五月天综合婷婷| 一区二区日韩精品| 午夜精品小视频| 国产精品久久久精品四季影院| www.久久久精品| 小明精品国产一区二区三区| 在线观看视频一区| 日韩女优毛片在线| 91精品国产高久久久久久五月天| 成人久久一区二区三区| 亚洲激情在线看| 日本在线三级| 久久午夜免费视频| 性の欲びの女javhd| 九九视频精品全部免费播放| 青春草在线视频观看| seseavlu视频在线| 亚洲免费专区| 久久手机在线视频| 国产一区喷水| 精品国产123| 国产日产精品1区| 日韩少妇裸体做爰视频| 日韩电影在线免费看| 一区二区三区高清在线观看| 一区二区三区四区不卡在线| 91精品在线影院| 无码人妻久久一区二区三区蜜桃| 亚洲成人在线电影| 三级毛片在线看| 国产xxx69麻豆国语对白| 丁香花五月婷婷| www.日日夜夜| 国产精品资源网| 国产精品999在线观看| 欧美精品三级在线观看| 亚洲18私人小影院| 国产精品视频在线看| 欧美精品一卡| 日韩极品视频在线观看| 国产成人香蕉在线视频网站| www.色日本| 成人午夜视频精品一区| sese在线| 大伊香蕉精品视频在线| 欧美高清视频一区二区三区| 麻豆一区二区麻豆免费观看| heyzo在线观看| 美日韩精品免费观看视频| 主播国产精品| 欧美韩国日本精品一区二区三区| 欧美极品免费| 日本青青草视频| 懂色aⅴ精品一区二区三区| 久久综合九色综合97婷婷女人| 羞羞色国产精品| 涩涩av在线| 天天色天天综合| 一区二区三区中文在线观看| 欧美黄网站色视频| 国产精品偷乱一区二区三区| 国产精品美日韩| 欧美另类bbbxxxxx另类| 国产精品熟女视频| 强迫凌虐淫辱の牝奴在线观看| 国产一区二区三区三州| 国语自产偷拍精品视频偷| 欧美亚洲丝袜传媒另类| 日日狠狠久久偷偷四色综合免费| 在线观看网站黄不卡| 一级特黄特色的免费大片视频| 亚洲无亚洲人成网站77777| 给我看免费高清在线观看| av影片在线播放| 成人精品国产免费网站| 国产在线a视频| 欧美熟妇精品黑人巨大一二三区| 亚洲电影在线播放| 寂寞少妇一区二区三区| 欧美日韩一区二区不卡| 国产在线精品国自产拍免费| 韩国一区二区电影| 大胆欧美人体视频| 成人国产综合| www国产视频| 欧美三级又粗又硬| 欧美乱熟臀69xxxxxx| 国产黄大片在线观看| 久久99精品久久久久婷婷| 国产一级粉嫩xxxx| 欧洲熟妇的性久久久久久| 久久精品视频免费观看| 亚洲精品国产综合区久久久久久久| 99视频一区二区三区| 亚洲激情午夜| 国产69精品久久久久9999小说| 亚洲成人午夜影院| 99久久99久久精品免费看蜜桃| 久久99精品久久久| 日本道在线观看一区二区| 一区二区三区91| 久久精品视频一| 色噜噜在线观看| 日韩专区第三页| 欧美成人精品一区二区男人看| 99久久er热在这里只有精品66| 超碰av女优在线| 色偷偷一区二区三区| 亚洲成av人乱码色午夜| 椎名由奈av一区二区三区| 欧美精品亚洲二区| 国产精品青草久久| 国产在线一区二区三区| 免费在线观看成年人视频| 天天干天天干天天干天天| 成年人黄色在线观看| 九九视频在线观看| 日本不卡影院| 粉嫩在线一区二区三区视频| 中文字幕无码人妻少妇免费| 伊人久久在线| 欧美 激情 在线| 国产69精品久久久久9999| 日本不卡在线观看视频| 国产传媒一区| 欧美高清一区| 久久香蕉国产线看观看av| 国产成人精品一区二区三区视频| 在线视频在线视频7m国产| 日韩一区二区在线| 久久天堂av综合合色| 国产精品欧美三级在线观看| 欧美亚洲一区二区在线| fc2ppv在线观看| 青草青青在线视频| 国产资源在线免费观看| 精品久久人人做人人爽| 精品久久视频| 91av俱乐部| 国产在线精品一区| 日韩不卡免费视频| 日韩国产在线播放| 欧美专区国产专区| 亚洲免费电影一区| 四虎影视1304t| 中文字幕一区免费在线观看| 人人爽香蕉精品| 九色成人国产蝌蚪91| 欧美喷水一区二区| 精品一区二区国语对白| 久久精品久久久精品美女| 五月精品视频| 伊人久久成人| 亚洲精品亚洲人成人网在线播放| 直接看的黄色网址| 咪咪网在线视频| 日韩av不卡电影| 欧美一区二区三区综合| 国产视频一二区| 亚洲久久中文字幕| 四虎www成人影院观看| 欧美激情一区二区三区在线| 欧美午夜精品一区二区三区| 国产全是老熟女太爽了| 欧美激情一区二区三区不卡| 中文字幕在线看人| 亚洲字幕av一区二区三区四区| 日韩一区二区电影在线| 一级女性全黄久久生活片免费| 黄色片免费大全| 国产成人短视频| 色18美女社区| 99精品在线播放| 欧美污视频网站| 久久不射电影网| 亚洲综合激情小说| 日韩中文字幕亚洲| 亚洲日本欧美中文幕| 日韩色在线观看| xxxx黄色片| 国产乱淫av一区二区三区| 青青草视频在线视频| 久久国产精彩视频| 欧美激情第三页| 欧美精品卡一卡二| 日韩国产在线|