是否有编程模式为C#中的泛型类提供可重写的默认值?
假设我有一个类是否有编程模式为C#中的泛型类提供可重写的默认值?,c#,generics,polymorphism,factory,C#,Generics,Polymorphism,Factory,假设我有一个类BaseClass,它有两个子类ChildClassA:BaseClass和ChildClassB:BaseClass。对于每个子类,我想为每个类提供两个常量的一些实现,Zero和One,以便以下代码可以工作: var valueOfZeroA=ChildClassA.Zero; var valueOfOneB=儿童类B.0; 我还应该能够创建一个泛型类,该类具有一个基于泛型类型选择适当值的方法 class GenericUsingClass其中T:BaseClass { 公共空
BaseClass
,它有两个子类ChildClassA:BaseClass
和ChildClassB:BaseClass
。对于每个子类,我想为每个类提供两个常量的一些实现,Zero
和One
,以便以下代码可以工作:
var valueOfZeroA=ChildClassA.Zero;
var valueOfOneB=儿童类B.0;
我还应该能够创建一个泛型类,该类具有一个基于泛型类型选择适当值的方法
class GenericUsingClass其中T:BaseClass
{
公共空间
{
零的var值=T.零;
var值OfOne=T.One;
}
}
例如,如果我创建了一个新的GenericUsingClass()
,那么valueOfZero
的值将与ChildClassA.Zero
的值相同
我的问题是:我需要一些编程模式来实现类似的东西。我知道我的代码示例中的语法在解决方案中是不可能的;这只是为了说明目的。我已经提供了一个可能的解决方案,但我觉得它有点丑陋,我想知道是否有人能为我提供一个更好的解决方案,或者解释为什么我的解决方案可能会尽可能好
到目前为止,我已经提出了一个工厂模式,它似乎可以正常工作。内容如下: 对于
BaseClass
的每个子类,都需要有一个工厂类,例如ChildClassAFactory
和ChildClassBFactory
每个工厂类都派生自一个类BaseClassFactory
然后,BaseClassFactory
将被定义为:
抽象类BaseClassFactory,其中T:BaseClass
{
公共抽象T Zero(){…}
公共摘要T One(){…}
}
子工厂将实现方法Zero()
和One()
然后必须将GenericUsingClass
重构为:
class GenericUsingClass其中T:BaseClass
{
公共空间
{
BaseClassFactory=新的BaseClassFactory();
var valueOfZero=factory.Zero();
var valueOfOne=工厂1();
}
}
或者,使用依赖项注入:
class GenericUsingClass其中T:BaseClass
{
公共真空装置(BaseClass工厂)
{
var valueOfZero=factory.Zero();
var valueOfOne=工厂1();
}
}
我不喜欢这种方法,因为
谢谢 你到底想解决什么问题?你能详细说明一下你想达到什么目的吗?C#基本上是一种静态类型的语言,因此继承实际上是静态的。或者你的确切意思是什么?这能回答你的问题吗?我对造成的混乱表示歉意。我修改了我的问题。如果你能再看一次,我会很高兴的。@PavelAnikhouski,我见过使用静态属性和反射的方法,但是这看起来很混乱,并且没有很好地遵循OOP原则,这就是我遇到的问题。