是否有编程模式为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();
}
}
我不喜欢这种方法,因为

  • 它需要两倍的类来实现单个子类的功能,尽管我不太关心这个问题
  • 我必须在我的泛型using类中创建或注入一个对象工厂,这似乎会给代码增加混乱,并降低实现的易用性
  • 我也知道反思是有可能的,但对于这个问题来说,这似乎是矫枉过正,会把事情弄得一团糟。我只是想知道最好的软件架构想法是什么


    谢谢

    你到底想解决什么问题?你能详细说明一下你想达到什么目的吗?C#基本上是一种静态类型的语言,因此继承实际上是静态的。或者你的确切意思是什么?这能回答你的问题吗?我对造成的混乱表示歉意。我修改了我的问题。如果你能再看一次,我会很高兴的。@PavelAnikhouski,我见过使用静态属性和反射的方法,但是这看起来很混乱,并且没有很好地遵循OOP原则,这就是我遇到的问题。