我有一个工厂,它应该在运行时创建从类 Foo 继承的对象。我会认为 System.Activator.CreateInstance 的返回类型与它正在创建的对象的类型相同,但是从以下错误消息来看,它的返回类型是 Object。
错误 1 无法将类型“object”隐式转换为“cs_sandbox.Foo”。存在显式转换(您是否缺少演员表?) F:\projects\cs_sandbox\Form1.cs 46 24 cs_sandbox
好的,所以也许我错过了一个演员,但是
return (t)System.Activator.CreateInstance(t);
导致另一个错误消息,我必须承认,这对我来说毫无意义:
错误 1 找不到类型或命名空间名称“t”(是否缺少 using 指令或程序集引用?) F:\projects\cs_sandbox\Form1.cs 45 25 cs_sandbox
这是我的代码:
class Foo { }
class FooChild1 : Foo { }
class FooChild2 : Foo { }
class MyFactory
{
public static Foo CreateInstance(string s)
{
Type t;
if (s.StartsWith("abcdef"))
{
t = typeof(FooChild1);
return System.Activator.CreateInstance(t);
}
else
{
t = typeof(FooChild2);
return System.Activator.CreateInstance(t);
}
}
}
如何修复此代码?或者,如果它不可修复,那么在运行时创建从特定类继承的对象的其他方法是什么?