C# CreateIronPython类的Activator.CreateInstance
是否可以使用Activator.CreateInstance根据Ironpython中声明的类型在c中创建类?如果我尝试使用它,我总是得到这样一条消息:没有找到无参数构造函数C# CreateIronPython类的Activator.CreateInstance,c#,.net,instance,ironpython,activator,C#,.net,Instance,Ironpython,Activator,是否可以使用Activator.CreateInstance根据Ironpython中声明的类型在c中创建类?如果我尝试使用它,我总是得到这样一条消息:没有找到无参数构造函数 谢谢大家! 假设您使用Activator.CreateInstance的重载只接受Typeargument,那么您的类必须有一个接受零参数的构造函数 如果您坚持使用Activator.CreateInstance的重载,它只接受类型参数,而不是实例,那么您必须实现一个无参数构造函数 例如: public class MyC
谢谢大家! 假设您使用Activator.CreateInstance的重载只接受Typeargument,那么您的类必须有一个接受零参数的构造函数 如果您坚持使用Activator.CreateInstance的重载,它只接受类型参数,而不是实例,那么您必须实现一个无参数构造函数 例如:
public class MyClass
{
public MyClass() // <-- parameterless constructor
{
}
}
public class MyClass : SomeBaseClassYouDontControl
{
public MyClass() : base(null) // <-- still a parameterless constructor
{
}
}
但是,我建议不要使用Activator.CreateInstance,因为它的性能很差,现在比以前的C/.NET版本要好一些@Schlaviener的回答包含了更多关于这方面的信息
这个问题,可能也和你的问题有关 Activator.CreateInstance有许多重载。您应该使用重载,它需要属性的类型和adition对象数组 您可以创建此类的实例
public class MyClass
{
public MyClass(int _int, string _string, bool _bool)
{
}
}
与
正如die maus所说,与其他解决方案相比,Activator.CreateInstance可能速度较慢。但这完全取决于你想做什么。如果您想构建依赖注入框架,我建议您使用替代方法。如果您想在运行时创建一个类型,而不管它是需要3毫秒还是15毫秒,您都可以
我写了一个快速基准:
var sw = new System.Diagnostics.Stopwatch();
sw.Start();
for (int i = 0; i < 100000; i++)
{
var file = new System.IO.FileInfo(@"c:\temp\file");
}
var t1 = sw.ElapsedMilliseconds;
var args = new object [] { @"c:\temp\file" };
sw.Restart();
for (int i = 0; i < 100000; i++)
{
var file = Activator.CreateInstance(typeof(System.IO.FileInfo), args);
}
var t2 = sw.ElapsedMilliseconds;
Console.WriteLine("t1: {0}", t1);
Console.WriteLine("t2: {0}", t2);
在大多数情况下,我不认为这是巨大的……
简短的回答,不可能。
@ VEVEKE我不明白你的意思。只有一个参数更少的构造函数,这就是为什么我很困惑。没有什么可以说……你的类必须有一个零参数的构造函数。我假设OP使用的Activator.CreateInstance的重载只接受类型参数,那该如何处理呢。但我会在我的帖子中添加信息。实际上,您可以省略新对象[]{1,string,true},只需将参数指定为。。。仅此而已,因为args参数是params参数。Activator.CreateInstanceTypeOfCyclass,1,字符串,true;谢谢,但是:1。我没有参数。2.这场演出不对劲。3.我使用dlr类,这似乎是problem@BendEg-错误消息“找不到无参数构造函数”非常清楚。也许您可以发布一些示例代码或查看type.getconstructor,以了解您的类有哪些.ctor。 var sw = new System.Diagnostics.Stopwatch();
sw.Start();
for (int i = 0; i < 100000; i++)
{
var file = new System.IO.FileInfo(@"c:\temp\file");
}
var t1 = sw.ElapsedMilliseconds;
var args = new object [] { @"c:\temp\file" };
sw.Restart();
for (int i = 0; i < 100000; i++)
{
var file = Activator.CreateInstance(typeof(System.IO.FileInfo), args);
}
var t2 = sw.ElapsedMilliseconds;
Console.WriteLine("t1: {0}", t1);
Console.WriteLine("t2: {0}", t2);
t1: 466
t2: 1246