试图识别使用的模式/范例(使用C#)

时间:2015-11-09 17:10:06

标签: c# generics type-constraints

在处理对象层次结构的特定设计时,我想出了一个情况,并构建了一个有效的设计,但它的使用模式非常混乱,我想检查是否有人看过这种模式以前和是否有任何文献:

所以想象你有一个动物的Heirarchy:

class Animal
class Mammal : Animal
class Dolphin : Mammal

现在假设我们有一个界面:

interface IMating<T>
{
    MateWith(T otherAnimal);
}

在这种情况下,我使用泛型强类型MateWith方法。我可以使用对象并进行一些可能不安全的转换,但我选择强力输入内容。

鉴于这个界面,我理想的是:

class Animal : IMating<Animal>
{
}

class Mammal : Animal, IMating<Mammal>
{
}

class Dolphin : Mammal, IMating<Dolphin>
{
}

这样做允许派生的IMating.MateWith方法通过使用这些类的基本版本来扩展它的父项行为。当然这意味着如果我使用Dolphin的实例,我会在Dolphin上使用以下方法登陆:

Dolphin.MateWith(Animal a);
Dolphin.MateWith(Mammal m);
Dolphin.MateWith(Dolphin d);

显然,我只想要该列表中的最后一个方法,并且我希望其他方法不被访问,只是用完了基链(动物和哺乳动物在我的情况下并不是抽象的,可以实例化)。一种替代方案是利用组合物从而抽象出内部基础&#34;正在使用的课程。

由于这更像是一个有助于继承的层次结构,我使用通用约束解决了我的问题如下(带有一些副作用):

class Animal<T> : IMating<T>
where T : Animal
{
}

class Mammal<T> : Animal<T>
where T : Mammal
{
}

class Dolphin<T> : Mammal<T>
where T : Dolphin
{
}

基本上我将每个类都设置为层次结构通用,但是在最小值时,类型参数必须至少是类本身的类型或该类的任何派生版本。

大部分模式解决了我想要实现的目标,但我想知道这种模式是否在其他任何地方使用,以及为什么?它在某处记录了吗?它是众所周知的吗?

提前感谢任何帮助/指针

0 个答案:

没有答案