国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

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

來源:懂視網 責編:小采 時間:2020-11-27 22:42:05
文檔

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

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

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; }
}

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

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

C#中的Equals、RefrenceEquals和==的區別與聯系:C#中判斷兩個對象是否相等有Equals、RefrenceEquals和==三種,其中==為運算符,其它兩個為方法,而Equals又有兩種版本,一個是靜態的,一個是虛擬的,虛擬的可以被實體類重寫,靜態的在方法體內也是調用虛擬的,如下: 代碼如下:public static
推薦度:
標簽: 區別和 c# ==
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产欧美日韩另类va在线 | 国产精品资源在线播放 | 日韩欧| 欧美激情网站 | 日韩黄| 国产一区二区免费播放 | 亚洲国产激情一区二区三区 | 久久精品亚洲一区二区 | 欧美视频亚洲视频 | 欧美成人高清在线视频大全 | 亚洲精国产一区二区三区 | 国产成人精品一区二区不卡 | 99热成人精品国产免国语的 | 国产在线看不卡一区二区 | 精品在线一区二区 | 91香蕉福利一区二区三区 | 免费看黄视频网站 | 国产一区二区三区视频在线观看 | 国产精品久久久久久免费播放 | 国产特级全黄一级毛片不卡 | 日韩综合在线视频 | 热久久国产 | 日韩最新视频一区二区三 | 免费观看黄色网址 | 欧美不卡在线 | 一区二区网站 | 亚洲一区二区三区高清 | 国产成人一区在线播放 | 欧美在线视频观看 | 亚洲欧美日韩网站 | 亚洲精品视频在线观看免费 | 国模冰冰双人炮gogo | 欧美日韩一区二区三区久久 | 99999久久久久久亚洲 | 亚洲国产激情一区二区三区 | 亚洲成人国产 | 亚洲色图欧美色 | 国产亚洲综合成人91精品 | 亚洲欧美在线免费观看 | 亚洲国产精品二区久久 | 欧美三级在线 |