我将使用一个虚构的例子来说明。比如,我有一个像这样的 Widget 类:
abstract class Widget
{
Widget parent;
}
现在,我的其他类将从这个Widget类派生出来,但是假设我想在定义派生类型时对该类施加一些约束,以便只有特定“类型”的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>
{
}
当我想要访问WidgetChild的父级时,不要使用以下方式:
WidgetParent wp = wc.parent as WidgetParent;
if(wp != null)
{
wp.Slap();
}
else throw FakeParentException();
我希望能这样使用它(如果我可以使用泛型):
wc.parent.Slap();