通常用反射获取类对象的实例比较简单,只要类有一个无参构造函数或没有显示声明带参的构造函数便可使用以下代码函数
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)
这样就能够了