通常用反射獲取類對象的實例比較簡單,只要類有一個無參構造函數或沒有顯示聲明帶參的構造函數便可使用以下代碼函數
static void Main(string[] args) { Type type = typeof(MyObject); object obj = type.GetConstructor(Type.EmptyTypes).Invoke(null); Console.WriteLine(obj); } class MyObject { }
以前我一直沒有發現原來結構是不能夠這樣實例化的spa
換種方式,彷佛結構體使用反射沒法獲得其構造函數ConstructorInfo對象code
類中有一個隱式的構造函數,而結構沒有構造函數對象
我甚至嘗試查找非public構造函數blog
依然沒有get
這問題一度困擾我好久....解決的方法並不難,因此也沒當回事,但今天有個朋友又問到了這個問題,因此總結一下發出來,給一樣遇到這個問題的朋友string
其實很是簡單,只要這樣就能夠了it
static void Main(string[] args) { Type type = typeof(MyStruct); object obj1 = type.Assembly.CreateInstance(type.FullName); } struct MyStruct { }
這個方法說明class
Assembly.CreateInstanceobject
使用區分大小寫的搜索,今後程序集中查找指定的類型,而後使用系統激活器建立它的實例。
使用這個方法就不用管class仍是struct 都是能夠用的,若是是class只要保證有無參構造函數就能夠了
這個方法不是什麼高深的玩意兒,主要是給一樣碰到這個問題的同窗說明一下
======================================================
感謝 KarasCanvas同窗,原來C#還有Activator這麼一個類
Activator.CreateInstance(Type)
這樣就能夠了