C# 利用反射创建类型实例的时候报错 MissingMethodException
2016-08-25 00:00
369 查看
摘要: C# 利用反射创建类型实例的时候报错 MissingMethodException 无法创建抽象类。
正常报出 MissingMethodException,是因为”No matching public constructor was found“,这是官方解释。
也就是去检查一下是不是有无参构造函数,因为利用反射创建实例,就是调用无参构造函数。
如果不是构造函数的原因,那再来看看第二个错误信息:无法创建抽象类。
抽象类肯定是无法创建实例的,自然不比多说。
可是,what?我创建的类不是抽象类啊,为什么会这样提示?
经过我各种百度各种谷歌各种必应,大致猜测其原因是:该类中有用到动态绑定机制或者后期绑定机制,所以在编译阶段无法”完全编译“(不知道这个描述对不对)该类型,然后就造成这个类是个抽象类?(我也不太确定,没找到相关信息)
我的情况是在类中有用到动态类型 dynamic,然后用反射创建不了其实例,报出了 MissingMethodException 无法创建抽象类 的错误。
解决方案:把需要进行反射的类型里面的动态类型用 Dictionary<string, object> 代替,然后把 Dictionary 复制给动态类型,利用动态类型来访问其中的数据。
正常报出 MissingMethodException,是因为”No matching public constructor was found“,这是官方解释。
也就是去检查一下是不是有无参构造函数,因为利用反射创建实例,就是调用无参构造函数。
如果不是构造函数的原因,那再来看看第二个错误信息:无法创建抽象类。
抽象类肯定是无法创建实例的,自然不比多说。
可是,what?我创建的类不是抽象类啊,为什么会这样提示?
经过我各种百度各种谷歌各种必应,大致猜测其原因是:该类中有用到动态绑定机制或者后期绑定机制,所以在编译阶段无法”完全编译“(不知道这个描述对不对)该类型,然后就造成这个类是个抽象类?(我也不太确定,没找到相关信息)
我的情况是在类中有用到动态类型 dynamic,然后用反射创建不了其实例,报出了 MissingMethodException 无法创建抽象类 的错误。
解决方案:把需要进行反射的类型里面的动态类型用 Dictionary<string, object> 代替,然后把 Dictionary 复制给动态类型,利用动态类型来访问其中的数据。
public class Test{ public Dictionary<string, object> TestMethod(){ // 我本来想这样写的,因为写起来方便 // dynamic data = new ExpandoObject(); // data.Test = "test"; // 然后只好改成这样了 Dictionary<string, object> data = new Dictionary<string, object>(); data["Test"] = "test"; } public static void main(string[] args){ dynamic data = new Test.TestMethod(); // do sth. // 将 Dictionary 复制给动态类型的好处就是不需要自己去进行类型转换 // 假设 Dictionary 里面存了一个 List,关键字为 test2 // 从动态类型中获取出数据后,可以直接调用 List 的方法 // 而从 Dictionary 中获取出来的数据,需要类型转换 // 即 data["test2"].Add("sth."); } }
相关文章推荐
- C# 利用反射动态创建对象——带参数的构造函数和String类型
- C#利用反射创建实例
- C#利用反射动态创建对象 带参数的构造函数和String类型
- c# 利用反射来创建实例
- C# 利用反射动态创建对象——带参数的构造函数和String类型
- C# 利用反射根据类名创建类的实例对象
- C#利用反射动态创建对象 带参数的构造函数和String类型 (转载)
- c# 利用反射 从json字符串 动态创建类的实例 并动态为实例成员赋值
- 详解C# 利用反射根据类名创建类的实例对象
- 【经典实例】利用C#反射动态编译代码,创建类的实例,并调用其成员
- .Net 中的反射(动态创建类型实例) - Part.4动态创建对象
- .Net 中的反射(动态创建类型实例) - Part.4
- C# 2005如何根据类型声明的字符串反射创建泛型(Generic)对象
- 利用反射技术创建只包含私有无参构造函数的对象实例
- C#中利用反射,动态生成类的实例
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- C# 利用反射动态创建对象[转]
- .Net 中的反射(动态创建类型实例) - Part.4(转载)
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- [C#] 利用反射动态创建对象