我有一个基础程序,它可以实现一个抽象类。
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'
obj1
和obj2
不是字符串。他们是班级。
我该怎么做?
答案 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”关键字