我正在使用一个虚构的例子.说,我有一个Widget类,如:
abstract class Widget { Widget parent; }
现在,我的其他类将从这个Widget类派生,但是假设我想在定义派生类型时在类中加入一些约束,这样只有特定类型的小部件才能成为特定类型的Widget的父类.
例如,我从Widget类,WidgetParent和WidgetChild派生了两个小部件.在定义子类时,我想将父类型定义为WidgetParent,这样我每次使用它时都不必输入父类.
确切地说,我希望做的是:
// This does not works! class Widget: where PType: Widget { PType parent; } class WidgetParent { public void Slap(); } class WidgetChild { }
因此,当我想访问WidgetChild的父级时,而不是以这种方式使用它:
WidgetParent wp = wc.parent as WidgetParent; if(wp != null) { wp.Slap(); } else throw FakeParentException();
我想以这种方式使用它(如果我可以使用泛型):
wc.parent.Slap();
Jon Skeet.. 8
您应该能够使用仍然拥有非泛型类Widget
并Widget
从中派生的代码:
public abstract class Widget { } public abstract class Widget: Widget where T : Widget { }
然后,您需要弄清楚泛型类中的属性以及属于非泛型的内容......从经验来看,这可能是一个棘手的平衡行为.期待来回相当数量!
您应该能够使用仍然拥有非泛型类Widget
并Widget
从中派生的代码:
public abstract class Widget { } public abstract class Widget: Widget where T : Widget { }
然后,您需要弄清楚泛型类中的属性以及属于非泛型的内容......从经验来看,这可能是一个棘手的平衡行为.期待来回相当数量!