1. 程式人生 > 其它 >C# typeof() 和object.GetType() 、Type..GetType()使用和區別

C# typeof() 和object.GetType() 、Type..GetType()使用和區別

進行學習到表達樹了,用動Tpye了。所以整理了以下他們區別和用法

總得來說他們都是為了獲取某個例項具體引用的資料型別System.Type。

1、GetType()方法繼承自Object,所以C#中任何物件都具有GetType()方法,x.GetType(),其中x為變數名

2、typeof(x)中的x,必須是具體的類名、型別名稱等,不可以是變數名稱

3、System.Type.GetType(),有兩個過載方法

比如有這樣一個變數i:
Int32 i = new Int32();

使用GetType(),i.GetType()返回值是Int32的型別,但是無法使用typeof(i),因為i是一個變數,

使用typeof(),則只能:typeof(Int32),返回的同樣是Int32的型別。

使用System.Type.GetType()得到Type引用
為了以更靈活的方式得到型別資訊,我們可以呼叫System.Type類的靜態成員GetType(),然後指定型別的完全限定名。採用這種方法,我們不需要得到正從中提取元資料的型別的編譯時資訊,

1)Type.GetType()方法被過載一:

允許我們指定兩個布林型別的引數,一個用來控制當型別找不到時是否丟擲異常,另一個用來指示是否區分字串大小寫。

例如:
//使用靜態的Type.GetType()方法獲取型別資訊(如果SportsCar沒有找到,則忽略不丟擲異常資訊)
Type t = Type.GetType("CarLibrary.SportsCar",false,true);

2)Type.GetType()方法被過載二:

在上面的例子中,注意傳入GetType()的字串沒有包含型別所在的程式集資訊。在這種情況下,該型別便被認為是定義在當前執行的程式集中。但是,當希望得到一個外部私有程式集的型別元資料時,字串引數必須使用型別完全限定名,加上型別所在的程式集的名字(每一個都用逗號隔開):

程式設計是個人愛好