gpt4 book ai didi

c# - 泛型和工厂

转载 作者:太空狗 更新时间:2023-10-30 00:12:57 25 4
gpt4 key购买 nike

我是泛型的新手,一直在努力弄清楚如何从工厂返回一个基类是泛型的类的实例。请参阅下面的示例代码。问题在工厂类中突出显示:

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();
}
// **********************************************
}
}

我该如何解决这个问题??

提前致谢

哎呀

最佳答案

在我的大多数泛型类中,我都放置了一个非泛型接口(interface)。实际上,我会实现这样的东西:

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

通过这种方式,您可以清楚地说明可以创建哪些类型,并且仍然将调用者与具体类型分离。

当然,对于这种情况,您不一定需要非通用接口(interface),但实际上,您很可能需要它。

关于c# - 泛型和工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1594478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com