当前位置:  开发笔记 > 编程语言 > 正文

通用类的通用父类

如何解决《通用类的通用父类》经验,为你挑选了1个好方法。

我正在使用一个虚构的例子.说,我有一个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

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

public abstract class Widget
{
}

public abstract class Widget : Widget where T : Widget
{
}

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



1> Jon Skeet..:

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

public abstract class Widget
{
}

public abstract class Widget : Widget where T : Widget
{
}

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

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有