国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看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; } 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产综合久久久 | 国产精品免费视频观看 | 久久久久久久av | 视频一区二区三区免费观看 | 91麻豆蜜桃一区二区三区 | 成人在线视频网站 | 午夜av毛片 | 一区二区在线免费观看 | 成人亚洲精品 | 成人在线免费看视频 | 国产一区视频在线看 | www.中文字幕.com | 日韩天堂 | av免费在线观看网站 | av色资源| 色综合欧美 | 亚洲精品在线观看av | 色综合视频 | 亚洲在线| 在线看av的网址 | 中文字幕91| 欧美久久久久久 | 国产视频一区二区在线 | 国产综合亚洲精品一区二 | 青青草97 | 亚洲欧洲成人 | 国产一区二区在线免费观看 | 伊人五月| 日韩美女毛片 | 成人乱人乱一区二区三区 | 国产精品美女久久久久久久久久久 | 国产亚洲精品女人久久久久久 | 精品久久久久久久 | 一区二区久久 | a级免费黄色片 | 日韩国产在线观看 | 亚洲大奶网 | 伊人电影综合网 | 日韩欧美在线观看 | 久久99视频精品 | 亚洲欧美精品一区 |