【发布时间】:2010-09-20 15:19:06
【问题描述】:
我为此使用了一个虚构的例子。说,我有一个像这样的 Widget 类:
abstract class Widget
{
Widget parent;
}
现在,我的其他类将派生自这个 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();
【问题讨论】: