我是泛型的新手,并且一直在试图弄清楚如何从工厂返回一个基类是通用类的实例.请参阅下面的示例代码 这些问题在工厂类中突出显示:
public abstract class MyGenericBaseClass<T>
{
public string Foo()
{...}
}
public sealed class MyDerivedIntClass : MyGenericBaseClass<int>
{
}
public sealed class MyDerivedStringClass : MyGenericBaseClass<string>
{
}
public static class MyClassFactory
{
public static MyGenericBaseClass<T> CreateMyClass<T>()
{
// **********************************************
if (typeof(T) == typeof(int))
{
return new MyDerivedIntClass();
}
if (typeof(T) == typeof(string))
{
return new MyDerivedStringClass();
}
// **********************************************
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么绕过这个?
非常感谢提前
Ohgee
在我的大多数泛型类中,我都放了一个非泛型接口.实际上,我会实现这样的事情:
public interface INonGenericInterface
{
string Foo();
}
public abstract class MyGenericBaseClass<T> : INonGenericInterface
{
public string Foo()
{...}
}
public static class MyClassFactory
{
public static INonGenericInterface CreateMyDerivedIntClass()
{
return new MyDerivedIntClass();
}
public static INonGenericInterface CreateMyDerivedStringClass()
{
return new MyDerivedStringClass();
}
}
Run Code Online (Sandbox Code Playgroud)
这样,您可以清楚地说明可以创建哪些类型,并且仍然可以将调用者与具体类型分离.
当然,对于这种情况,您不一定需要非通用接口,但实际上,您很可能需要它.