0

我有一个隐含抽象类的基本程序。

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);

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

obj1并且obj2不是字符串。他们是班级。

我怎样才能做到这一点?

4

2 回答 2

2

摆脱new之前的CreateInstance

new MySuperSpecialClassOfThings(param1, (MyObject obj1, MyOtherObject obj2) => 
{
    return (AbstractClass)System.Activator.CreateInstance(Type.GetType(config.NonAbstractClassName), new object[] { obj1, obj2 });
}, true);
于 2012-10-30T02:53:05.793 回答
1

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

于 2012-10-30T03:53:23.457 回答