我正在閱讀書CLR via C#
由Jeffrey Richter
。類型定義和類型引用有什麼區別?
在Chapter 23(23.3.2)
,它說"A System.Type object represents a type reference(as opposed to a type definition)."
什麼類型引用和類型定義的意思嗎?
我正在閱讀書CLR via C#
由Jeffrey Richter
。類型定義和類型引用有什麼區別?
在Chapter 23(23.3.2)
,它說"A System.Type object represents a type reference(as opposed to a type definition)."
什麼類型引用和類型定義的意思嗎?
作者對比System.Type
與System.TypeInfo
。從the documentation:
甲所屬類別對象表示類型定義本身,而類型對象表示參考類型定義。
對於類的System.TypeInfo
只能在實現類(類型定義)的程序集加載或加載時才能實例化。爲了實例化System.Type
,唯一的要求是當前程序包含執行程序集的參考。
這個「參照」在「參考和指針」中有相同的概念嗎? @John Wu –
排序,但不是指向內存地址,類型引用指向程序集(包括版本和強名稱(如果適用))和類型名稱。 –
當您通過類,結構,接口或枚舉定義新類型時,會發生類型定義。
類型引用是關於類型的信息的集合,例如,其名稱或其成員。
System.Type
類能夠表示類型,但不能定義類型。 當您致電typeof(TypeName)
或object.GetType()
時,您將處理類型爲System.Type
的對象的表示形式。
只能使用System.Type
對象,不能直接實例化某個類型的對象。它只描述類型,但不是是的類型。這就是爲什麼它被稱爲參考。
A 類型定義意味着該類型的實際實現,例如,如果它是一個類,則表示類(具有其所有屬性和字段)的定義。
A 類型參考,僅僅意味着System.Type
包含特定類型的細節,也就是說,它是關於類型的元數據。
這是CLR規範可能會受到太多影響的語言。組件中的元數據區分了TypeDef和TypeRef。您可以使用C#中的類,結構或委託關鍵字獲取類型聲明的TypeDef。一個TypeRef出現在你使用的地方*在別處聲明的類型。比如你使用Object.GetType()或者typeof關鍵字。 –