[英]How == operator works with System.Type
typeof(int) == typeof(int)
此表達式如何計算?
當我使用
Console.WriteLine(typeof(int));
它使用對象的ToString()
方法輸出System.Int32
。 所以我假設在這個表達式中
typeof(int) == typeof(int)
ToString()
將其都轉換為System.Int32
,然后將其字符串進行比較。 真的嗎 ??
或其他事情正在發生
否。像其他所有類通常一樣,它使用相等比較器( ==
) System.Type
被覆蓋,並且對兩個實例之一檢查Equals
方法是否相等。
typeof(int)
返回Type
,因此調用Type.Equals
。 您可以在此處查看源代碼。
您將看到它最終使用它來比較兩個實例:
return (Object.ReferenceEquals(this.UnderlyingSystemType, o.UnderlyingSystemType));
所述typeof()
算子解析為一個System.Type
,並且==
上操作者System.Type
檢查引用相等 。 這對於System.Type
就足夠了,因為有以下保證:
表示類型的Type對象是唯一的; 也就是說,兩個Type對象引用在且僅當它們表示相同類型時才引用同一對象。 這允許使用引用相等性比較Type對象。
http://msdn.microsoft.com/en-us/library/42892f65.aspx
所以答案是,==檢查兩種類型是否都指向內存中完全相同的對象,並且如果原始對象屬於同一類型,則由於上面的引用,可以保證它們的類型都指向內存中的相同對象。 。
typeof(int) == typeof(int)
的IL代碼為
IL_0000: ldtoken System.Int32
IL_0005: call System.Type.GetTypeFromHandle
IL_000A: ldtoken System.Int32
IL_000F: call System.Type.GetTypeFromHandle
IL_0014: call System.Type.op_Equality
您可以看到它調用了靜態相等運算符
public static bool operator ==(Type left, Type right)
我們無法在參考源中看到此方法的作用,因為它顯然是外部方法,但我猜是它要么調用Equals
方法,要么在本機代碼中執行類似的比較。
Console.WriteLine(object);
的事實Console.WriteLine(object);
打印出一個string
並不意味着Type
類型總是一個字符串,類似於您可以打印出一個int
值而無需通過其ToString
方法查看和比較該int
方式。
==
運算符將測試類型的相等性,並且絕不涉及ToString()
。
我想您可能有點困惑-如果我不得不猜測-在打印某些內容和將其保存在內存之間的區別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.