通用类的通用父类

nul*_*Dev 4 c# generics

我正在使用一个虚构的例子.说,我有一个Widget类,如:

abstract class Widget
{
Widget parent;
}
Run Code Online (Sandbox Code Playgroud)

现在,我的其他类将从这个Widget类派生,但是假设我想在定义派生类型时在类中加入一些约束,这样只有特定类型的小部件才能成为特定类型的Widget的父类.

例如,我从Widget类,WidgetParent和WidgetChild派生了两个小部件.在定义子类时,我想将父类型定义为WidgetParent,这样我每次使用它时都不必输入父类.

确切地说,我希望做的是:

// This does not works!
class Widget<PType>: where PType: Widget
{
    PType parent;
}

class WidgetParent<Widget>
{
    public void Slap();
}

class WidgetChild<WidgetParent>
{
}
Run Code Online (Sandbox Code Playgroud)

因此,当我想访问WidgetChild的父级时,而不是以这种方式使用它:

WidgetParent wp = wc.parent as WidgetParent;
if(wp != null)
{
    wp.Slap();
}
else throw FakeParentException();
Run Code Online (Sandbox Code Playgroud)

我想以这种方式使用它(如果我可以使用泛型):

wc.parent.Slap();
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 8

您应该能够使用仍然拥有非泛型类WidgetWidget<T>从中派生的代码:

public abstract class Widget
{
}

public abstract class Widget<T> : Widget where T : Widget
{
}
Run Code Online (Sandbox Code Playgroud)

然后,您需要弄清楚泛型类中的属性以及属于非泛型的内容......从经验来看,这可能是一个棘手的平衡行为.期待来回相当数量!