Activator.CreateInstance – 如何创建具有参数化构造函数的类的实例
我已经在网上阅读了一些关于这个主题的内容,但发现没有一个对我有用。 我要做的是创建一个运行时类型的类。
我使用Activator.CreateInstance
,它适用于具有不包含参数的构造函数的类。 对于那些有参数的人会抛出exception,有没有办法绕过这个?
我非常乐意将空值或空值传递给ctor,只要我可以创建类本身。
有一个重载接受参数作为params object[]
:
object obj = Activator.CreateInstance(typeof(StringBuilder), "abc");
这会吗? 或者,您可以使用reflection来查找正确的构造函数:
Type[] argTypes = new Type[] {typeof(string)}; object[] argValues = new object[] {"abc"}; ConstructorInfo ctor = typeof(StringBuilder).GetConstructor(argTypes); object obj = ctor.Invoke(argValues);
我最终最终做了这样的事情 – 一些评论员无论如何暗示了这个解决方案。
我基本上遍历了所有可用的构造函数并选择了最简单的构造函数。 然后我创建了空数据以传递到ctor(因为我使用它的方法很好)
部分代码看起来有点像这样
// If we have a ctor that requires parameters then pass null values if (requiresParameters) { List
我正在使用这种方法来解决我遇到的问题 ,它似乎正如我所希望的那样工作。 ?
object instance = Activator.CreateInstance( typeof(OpCode), BindingFlags.NonPublic | BindingFlags.Instance, default(Binder), new object[] { stringname, pop, push, operand, type, size, s1, s2, ctrl, endsjmpblk, stack }, default(CultureInfo));
Activator.CreateInstance也有一大堆重载,你可能想要检查的是(Type type,params object [] args)。 只需为此调用的第二个参数提供所需的构造函数参数即可。
确保你在这里处理exception,因为很容易传递不正确的参数或者稍后在类型的构造函数中更改某些东西会破坏它。
作为Activator.CreateInstance的替代方案,链接url中的FastObjectFactory比Activator更好(从.NET 4.0开始,明显优于.NET 3.5。没有使用.NET 4.5进行测试/统计)。 有关统计信息,信息和代码,请参阅StackOverflowpost。 请注意,可能需要根据ctor参数的数量进行一些修改。 提供的代码仅允许1 ctor param,但可以修改为超过1.请参阅代码中的注释。
如何在Activator.CreateInstance中传递ctor args或使用IL?
上述就是C#学习教程:Activator.CreateInstance – 如何创建具有参数化构造函数的类的实例分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1004792.html