![](/img/trans.png)
[英]How does the .Net CLR identify which .DLL is the primary (startup) DLL in a web application?
[英]How are types compared in .NET? How does the CLR identify they are the same or different?
Type.Equals(Type)
如何比較類型以了解它們是否相同?
最初的問題很困惑,因為我在體內的存在以及我認為將指導該問題的內容。 忘記那部分。 問題在標題中。
編輯:拉瑟五世·拉克森最恰當地提出了我的問題:
“組成.NET類型標識的是什么……”如果在兩個不同的項目/程序集中,我聲明完全相同的類型(直到名稱空間),. NET認為它們是不同的,為什么?
它是這樣實現的:(來自參考源)
public virtual bool Equals(Type o)
{
if ((object)o == null)
return false;
return (Object.ReferenceEquals(this.UnderlyingSystemType, o.UnderlyingSystemType));
}
public override bool Equals(object o)
{
return (((o != null) && (o is Type)) && (this.UnderlyingSystemType == ((Type) o).UnderlyingSystemType));
}
這來自最新的反映來源。
ECMA-335公共語言基礎結構分區I和II規定每種類型都可以通過給定的類型簽名來識別 。 它說明了IL如何表示此簽名,以及虛擬執行系統應如何解釋該簽名,但它保留了一致的運行時實現實際上必須如何實現此類型簽名的實現(據我所知)。
通過元數據中表示的類型聲明將新類型(值類型和引用類型)引入CTS。 此外,元數據是一種結構化的方式,表示CLI用來定位和加載類,在內存中布置實例,解析方法調用,將CIL轉換為本機代碼,實施安全性以及設置運行時上下文邊界的所有信息。
但是,對於您的問題,無論實際上如何實現UnderlyingSystemType
它都將使用以下內容與唯一引用相關聯:
分區II具有用於TypeDef
的物理元數據(第22.37節),該元數據對該信息進行了編碼。
分區III包含IL,該IL表示將元數據令牌(稱為RuntimeHandle
到堆棧上。 類型,方法和字段有不同的句柄,具體取決於提供給IL指令的令牌。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.