CreateInstance说它是一个类似于方法的方法

时间:2012-10-30 02:50:11

标签: c# abstract-class createinstance

我有一个基础程序,它可以实现一个抽象类。

public abstract class AbstractClass
{
    public AbstractClass (MyObject object1, MyOtherObject object2)
    {
        Console.WriteLine("This is the abstract class");
    }

    public abstract bool Function1();
    <other abstract functions>
}

现在,当我想要做不同的事情并为这些事情实现不同的抽象类时,我构建并编译了我的应用程序的单独版本。我发现这很乏味。

我希望能够使用这行代码

new MySuperSpecialClassOfThings(param1, (MyObject obj1, MyOtherObject obj2) => 
{
    return new NotAnAbstractClass(obj1, obj2);
}, true);

并将其更改为:

new MySuperSpecialClassOfThings(param1, (MyObject obj1, MyOtherObject obj2) => 
{
    return new System.Activator.CreateInstance(Type.GetType(config.NonAbstractClassName), new object[] { obj1, obj2 });
}, true);

其中config.NonAbstractClassName是配置文件中提供的字符串。但是,这失败了,错误: 'System.Activator.CreateInstance(System.ActivationContext, string[])' is a 'method' but is used like a 'type'

obj1obj2不是字符串。他们是班级。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

摆脱new之前的CreateInstance

new MySuperSpecialClassOfThings(param1, (MyObject obj1, MyOtherObject obj2) => 
{
    return (AbstractClass)System.Activator.CreateInstance(Type.GetType(config.NonAbstractClassName), new object[] { obj1, obj2 });
}, true);

答案 1 :(得分:1)

只需删除“new”keyword..CreateInstance即可根据参数类型返回对象的新实例。所以基本上你不需要“new”关键字