当前位置: 首页 > 编程语言 > C#

Activator.CreateInstance与私有密封类的共享

时间:2023-04-11 01:25:27 C#

Activator.CreateInstance和私有密封类我似乎能够很好地获取类型信息:AssemblysysData=Assembly.Load("System.Data,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089");localCmdType=sysData.GetType("System.Data.SqlClient.SqlCommandSet+LocalCommand");但是当我尝试实例化它时,Activator.CreateInstance抛出异常:objectitem=Activator.CreateInstance(localCmdType,newobject[]{commandText,parameters,num7,commandType});系统。MissingMethodException:找不到类型“System.Data.SqlClient.SqlCommandSet+LocalCommand”的构造函数。构造函数参数与我在Reflector中看到的签名匹配。是新的私有类,内部构造函数支持不同的CreateInstance重载还是什么?我的第一个想法是使用ConstructorInfoconstructorInfo=Type.GetConstructor()获取ConstructorInfo然后使用constructorInfo.Invoke()。我怀疑Activator.CreateInstance很难调用您通常无法访问的构造函数,尽管我不记得自己尝试过。我是这样工作的:使用系统;使用System.Reflection;类测试{公共字符串X{得到;放;}测试(字符串x){this.X=x;}}classProgram{staticvoidMain(){Typetype=typeof(Test);ConstructorInfoc=type.GetConstructor(BindingFlags.NonPublic|BindingFlags.Instance,null,newType[]{typeof(String)},null);Objecto=c.Invoke(newObject[]{"foo"});诀窍是专门使用GetConstructor来修改构造函数,而不是试图在GetConstructors的结果中找到它。找出来。我可能回复晚了一点,但我遇到了一个符合主题的类似问题。我想使用Activator.CreateInstance实例化一个非公共构造函数并传递其参数。公共类节点{字符串名称;节点父节点;protectedNode(stringname,Nodeparent){this.name=name;this.parent=parent;}publicstaticNodeCreate(stringname,Nodeparent){Noderesult=Activator.CreateInstance(typeof(Node),BindingFlags.Instance|BindingFlags.NonPublic,null,newobject[]{name,parent},null)asNode;返回结果;棘手的部分是绑定标志。我的第一直觉是使用BindingFlags.CreateInstance|BindingFlags.NonPublic,但这会引发异常:MissingMethodException找不到类型“Node”的构造函数。请享受技巧是确保您使用正确的CreateInstance重载://WRONG...Activator.CreateInstance(type,BindingFlags.Instance|BindingFlags.NonPublic);这调用了params重载,默认为Instance|公开|CreateInstance实例|公开|CreateInstance实例|公开|CreateInstance时,您的绑定标志将作为参数传递给构造函数,从而产生不明确的MissingMethodException。另外,使用Instance|公开|非公共实例|公开|非公共实例|公开|NonPublic如果你不确定构造函数的可见性:有用,需要多了解C#学习教程,希望大家多多关注—//对...Activator.CreateInstance(type,BindingFlags.Instance|BindingFlags.Public|BindingFlags.NonPublic,null,newobject[]{},//或者你实际的构造函数参数null);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢