我正在使用一个虚构的例子.说,我有一个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)
您应该能够使用仍然拥有非泛型类Widget并Widget<T>从中派生的代码:
public abstract class Widget
{
}
public abstract class Widget<T> : Widget where T : Widget
{
}
Run Code Online (Sandbox Code Playgroud)
然后,您需要弄清楚泛型类中的属性以及属于非泛型的内容......从经验来看,这可能是一个棘手的平衡行为.期待来回相当数量!
| 归档时间: |
|
| 查看次数: |
3868 次 |
| 最近记录: |