这是一个思维练习。我不需要帮助简化此代码或在不关联类型的情况下完成相同的事情。该代码令人费解,因为它试图确定一种模式,如果没有替代方案,则可以使用该模式。这个想法是看看是否可以在编译器强制执行的各种类型之间创建任意关系。我希望能够以相同的方式创建{T1, T2, T3, T4, ...}与另一组类型相关的一组类型{Ta, Tb, Tc, Td, ... }。建立关系后,我希望能够使用第二组中的类型,只使用第一组中的相关类型。例如,如果一个函数的类型为 T5,它应该能够创建 Te 的实例,因为 T5 和 Te 是相关的。在下面的示例中,我使用了类型{Nail, Screw},我想将它们与它们的 makers 联系起来{NailMaker, ScrewMaker}。这个思考练习的一个限制是使用类型Nail 来创建一个 NailMaker,而不是一个Nail的实例来这样做。目标是能够Maker使用第一组中的类型调用基类的静态成员,以在第二组中创建相关类型的实例:var factory = Maker<Nail>.Get()这factory将是一个NailMaker来自的实例Maker<Nail>,并且Get()是一个静态函数。我需要以某种方式与之相关NailMaker,Nail但我还没有找到一种方法来做到这一点。就像是:static public Maker<T> Get(){ return T.GetMaker();}我试过这个,它的工作原理:public abstract class Maker<T>{ static public Maker<T> Get<T2>() where T2: Maker<T>, new() { return new T2(); }}但是,我希望它在不通过 T2 的情况下工作。
2 回答
神不在的星期二
TA贡献1963条经验 获得超6个赞
我不确定您将在哪里应用它,但是参考工厂模式,您可以实现如下内容:
abstract class Maker {
public abstract int SomeProperty { get; }
}
abstract class MakerFactory {
public abstract Maker GetMaker();
}
class Nail:Maker {
}
class ConcreteNailFactory:NailFactory {
public override Maker GetMaker() {
return new Nail();
}
}
- 2 回答
- 0 关注
- 103 浏览
添加回答
举报
0/150
提交
取消