標籤:
原文:C#中使用反射擷取結構體執行個體
一般用反射擷取類對象的執行個體比較簡單,只要類有一個無參建構函式或沒有顯示聲明帶參的建構函式即可使用如下代碼
static void Main(string[] args){ Type type = typeof(MyObject); object obj = type.GetConstructor(Type.EmptyTypes).Invoke(null); Console.WriteLine(obj);}class MyObject{}
之前我一直沒有發現原來結構是不可以這樣執行個體化的
換種方式,似乎結構體使用反射無法得到其建構函式ConstructorInfo對象
類中有一個隱式的建構函式,而結構沒有建構函式
我甚至嘗試尋找非public建構函式
依然沒有
這問題一度困擾我很久....解決的方法並不難,所以也沒當回事,但今天有個朋友又問到了這個問題,所以總結一下發出來,給同樣遇到這個問題的朋友
其實非常簡單,只要這樣就可以了
static void Main(string[] args){ Type type = typeof(MyStruct); object obj1 = type.Assembly.CreateInstance(type.FullName);}struct MyStruct{}
這個方法說明
Assembly.CreateInstance
使用區分大小寫搜尋,從此程式集中尋找指定的類型,然後使用系統啟用器建立它的執行個體。
使用這個方法就不用管class還是struct 都是可以用的,如果是class只要保證有無參建構函式就可以了
這個方法不是什麼高深的玩意兒,主要是給同樣碰到這個問題的同學說明一下
======================================================
感謝 KarasCanvas同學,原來C#還有Activator這麼一個類
Activator.CreateInstance(Type)
這樣就可以了
C#中使用反射擷取結構體執行個體