激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - C#中的Equals、RefrenceEquals和==的區別與聯系

C#中的Equals、RefrenceEquals和==的區別與聯系

2019-10-13 14:18C#教程網 ASP.NET教程

C#中判斷兩個對象是否相等有Equals、RefrenceEquals和==三種,其中==為運算符,其它兩個為方法,而Equals又有兩種版本,一個是靜態的,一個是虛擬的,詳細了解可以參考本文

C#中判斷兩個對象是否相等有Equals、RefrenceEquals和==三種,其中==為運算符,其它兩個為方法,而Equals又有兩種版本,一個是靜態的,一個是虛擬的,虛擬的可以被實體類重寫,靜態的在方法體內也是調用虛擬的,如下: 

復制代碼代碼如下:


public static bool Equals(object objA, object objB) 

return ((objA == objB) || (((objA != null) && (objB != null)) && objA.Equals(objB))); 

public virtual bool Equals(object obj) 

return InternalEquals(this, obj); 

[MethodImpl(MethodImplOptions.InternalCall)] 
internal static extern bool InternalEquals(object objA, object objB); 
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] 
public static bool ReferenceEquals(object objA, object objB) 

return (objA == objB); 


以上為reflector反編譯的代碼。它們的區別與聯系總結如下: 
1. RefrenceEquals顧名思義,在任何情況下都是判斷兩個對象的引用是否相等,對于值類型,因為每次判斷前都必須進行裝箱操作,也就是每次都生成了一個臨時的object,因而永遠返回false。String類型比較特殊,只要字符相同永遠是同一個引用,字符不同就是不同的引用,即使通過傳遞賦值如:string str1 = "a"; string str2 = str1; str2 = "b";這時str1,str2依舊是不同引用。 

2. ==與Equals并無本質區別,它們大多數情況下都是一樣的,對于基本值類型,判斷的是值是否相等,對于引用類型,判斷的則是引用是否一樣。值得注意的是,自定義的值類型struct,本身并不支持運算符==,強行使用將會出現編譯錯誤。并且,鑒于Equals是虛方法,它可以被具體類重寫,因此需要具體問題具體分析。 

3. 前面提過,靜態的Equals本質上也是調用虛擬的Equals,它們的區別在于調用時,虛擬的要考慮對象是否為空,否則會拋異常,而靜態的則無需考慮。 
以下為測試代碼: 

復制代碼代碼如下:


class Program 

static void Main(string[] args) 

//AAA a1 = new AAA { Name = "a1", Age = 22 }; 
//AAA a2 = new AAA { Name = "a1", Age = 22 }; 
//int a1 = 123; 
//int a2 = 123; 
string a1 = "abc"; 
string a2 = "abc"; 
Console.WriteLine(string.Format("==: {0}", a1 == a2)); 
Console.WriteLine(string.Format("Equals: {0}", a1.Equals(a2))); 
Console.WriteLine(string.Format("Static Equals: {0}", Object.Equals(a1, a2))); 
Console.WriteLine(string.Format("ReferenceEquals: {0}", ReferenceEquals(a1, a2))); 
Console.Read(); 


// Class or Struct 
struct AAA 

public string Name { get; set; } 
public int Age { get; set; } 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品国产一区二区三区久久久蜜月 | 亚洲一区成人在线观看 | 1级黄色毛片 | 国产 视频 一区二区 | 九九爱视频 | 九九热在线视频免费观看 | 国产精品久久久久久久久久10秀 | 日本在线视频免费观看 | 精品成人av一区二区三区 | 成人国产免费观看 | 国产精品成人一区 | 西川av在线一区二区三区 | 国产色视频在线观看免费 | 久久不射电影 | 成人在线免费小视频 | 久久综合久久综合久久 | 中文字幕一区二区三区久久 | 国产精品欧美日韩一区二区 | 成人午夜免费网站 | 久久成人视屏 | 国产精选电影免费在线观看 | 中文字幕一区在线观看视频 | 成人免费观看毛片 | 欧美成人精品一区二区 | 久久伊人国产精品 | 欧美日本亚洲视频 | 性少妇videosexfreexx入片 | 做爰xxxⅹ性护士hd在线 | xnxx 美女19| 免费淫视频 | 黄色国产在线观看 | 美国黄色毛片女人性生活片 | 久久99精品国产99久久6男男 | 一本色道精品久久一区二区三区 | 国产一区在线观看视频 | 久久草在线观看视频 | 国产精品资源手机在线播放 | sese在线视频 | 中国老女人一级毛片视频 | 91伊人久久| 免费国产自久久久久三四区久久 |