最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中重載相等(==)運(yùn)算符示例

 更新時(shí)間:2015年06月11日 09:49:58   投稿:junjie  
這篇文章主要介紹了C#中重載相等(==)運(yùn)算符示例,運(yùn)算符重載一直是一個(gè)很詭異事情,本文通過(guò)實(shí)例探討由運(yùn)算符重載引出的一個(gè)問(wèn)題,需要的朋友可以參考下

運(yùn)算符重載一直是一個(gè)很詭異事情,因?yàn)樵趯?xiě)代碼的時(shí)候,不知道某個(gè)運(yùn)算符有沒(méi)有被重載過(guò)。在 C++ 里面,運(yùn)算符重載可以寫(xiě)在類(lèi)的外面,當(dāng) intellisense 不工作的時(shí)候,找到一個(gè)運(yùn)算符的重載函數(shù)是一件相當(dāng)頭疼的事情。這個(gè)問(wèn)題在 C# 中改善了不少,因?yàn)檫\(yùn)算符重載一定要寫(xiě)在類(lèi)內(nèi),而且 intellisense 很強(qiáng)大。不過(guò)另一個(gè)問(wèn)題又產(chǎn)生了……

先來(lái)看 C++ 中的“==”重載:

struct A{
 int x;
 int y;
};
 
inline
bool operator == (const A& a, const A& b){
 return a.x == b.x && a.y == b.y;
}

上面這段代碼中,由于聲明的關(guān)系,a 和 b 永遠(yuǎn)不可能為 NULL,所以直接調(diào)用 a.x 和 b.x 是沒(méi)有問(wèn)題的。

而在 C# 中:

struct A
{
 public int x, y;
 public static bool operator ==(A a, A b)
 {
  return a.x == b.x && a.y == b.y;
 }
 public static bool operator !=(A a, A b)
 {
  return !(a == b);
 }
}

這段代碼是沒(méi)問(wèn)題的,因?yàn)?A 是 struct,而 struct 不可能為 null。但換成 class 就有問(wèn)題了,比如:

class A
{
 public int x, y;
 public static bool operator == (A a, A b)
 {
  if (a == null && b == null)
  {
   return true;
  }
  if (a == null || b == null)
  {
   return false;
  }
  return a.x == b.x && a.y == b.y;
 }
 public static bool operator != (A a, A b)
 {
  return !(a == b);
 }
}

由于 reference type 可以為 null,所以要先檢查 a 和 b 是不是 null,但是“a == null”這一句又會(huì)去調(diào)用“operator ==”,于是就無(wú)限遞歸下去了……想了很久都沒(méi)想出來(lái)變通的方法,而且 System.String 的實(shí)現(xiàn)也很詭異:

public static bool operator == (string a, string b)
{
 return Equals(a, b);
}
public static bool Equals (string a, string b)
{
 return ((a == b) || (((a != null) && (b != null)) && EqualsHelper(a, b)));
}

看上去也會(huì)無(wú)限遞歸的(Reflector 出來(lái)的,不一定準(zhǔn)),很神奇……

雖然對(duì)于 Referece type 不建議重載==,但是不建議并不代表不能用吧,這個(gè)設(shè)計(jì)太挫了…

相關(guān)文章

  • C#利用PrintDocument定制打印單據(jù)的小例子

    C#利用PrintDocument定制打印單據(jù)的小例子

    這篇文章主要給大家介紹了關(guān)于C#利用PrintDocument定制打印單據(jù)的小例子,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • C#異步執(zhí)行任務(wù)的方法

    C#異步執(zhí)行任務(wù)的方法

    這篇文章主要介紹了C#異步執(zhí)行任務(wù)的方法,以一個(gè)簡(jiǎn)單實(shí)例形式分析了C#異步執(zhí)行的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • C#導(dǎo)出生成excel文件的方法小結(jié)(xml,html方式)

    C#導(dǎo)出生成excel文件的方法小結(jié)(xml,html方式)

    C#導(dǎo)出生成excel文件的方法小結(jié)(xml,html方式)。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-10-10
  • C#過(guò)濾sql特殊字符串的方法

    C#過(guò)濾sql特殊字符串的方法

    這篇文章介紹了C#過(guò)濾sql特殊字符串的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • C#對(duì)文件進(jìn)行批量重命名或者對(duì)某單個(gè)文件進(jìn)行改名的示例代碼

    C#對(duì)文件進(jìn)行批量重命名或者對(duì)某單個(gè)文件進(jìn)行改名的示例代碼

    這篇文章主要介紹了C#對(duì)文件進(jìn)行批量重命名或者對(duì)某個(gè)單獨(dú)的文件進(jìn)行改名的實(shí)現(xiàn)方法,文中有相關(guān)的代碼示例供大家參考,具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-05-05
  • C#實(shí)現(xiàn)身份證驗(yàn)證功能的示例代碼

    C#實(shí)現(xiàn)身份證驗(yàn)證功能的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)身份證驗(yàn)證功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • Winform窗體傳值的方法(示例)

    Winform窗體傳值的方法(示例)

    C#開(kāi)發(fā)windows應(yīng)用程序項(xiàng)目時(shí),不同窗口之間傳值有很多中方法,在此給大家介紹兩種比較常用的winform窗體傳值的方法,有需要的朋友可以參考下
    2015-08-08
  • C#中使用Spire.doc對(duì)word的操作方式

    C#中使用Spire.doc對(duì)word的操作方式

    這篇文章主要介紹了C#中使用Spire.doc對(duì)word的操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • C#實(shí)現(xiàn)更改MDI窗體背景顏色的方法

    C#實(shí)現(xiàn)更改MDI窗體背景顏色的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)更改MDI窗體背景顏色的方法,涉及C#窗體背景色的設(shè)置技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-08-08
  • C#利用WinForm實(shí)現(xiàn)查看指定目錄下所有圖片功能

    C#利用WinForm實(shí)現(xiàn)查看指定目錄下所有圖片功能

    Windows 窗體是用于生成 Windows 桌面應(yīng)用的 UI 框架, 它提供了一種基于 Visual Studio 中提供的可視化設(shè)計(jì)器創(chuàng)建桌面應(yīng)用的高效方法,本文介紹了C#利用WinForm實(shí)現(xiàn)可以查看指定目錄文件下所有圖片功能,需要的朋友可以參考下
    2024-05-05

最新評(píng)論

太谷县| 抚宁县| 余姚市| 中宁县| 济宁市| 永济市| 霸州市| 新绛县| 博乐市| 罗甸县| 黄陵县| 伊宁县| 阳新县| 缙云县| 瓦房店市| 林甸县| 太湖县| 沧源| 昌都县| 中西区| 平定县| 昂仁县| 封开县| 黄骅市| 宜州市| 闽侯县| 六安市| 河东区| 柘城县| 固镇县| 疏附县| 永城市| 富宁县| 宁化县| 武功县| 博兴县| 类乌齐县| 无棣县| 嘉黎县| 叙永县| 江城|