使用本地类作为抽象类的返回类型

时间:2017-01-24 13:10:59

标签: c# .net

我有一个抽象类Model,由CarModel实现。

我希望在Clone抽象类上有一个方法Model,我想返回实例化类的类型。

例如,我希望CarModel实施Model要求Clone方法返回CarModel,如下所示:

abstract class Model
{
    public abstract Model Clone();
}

class CarModel : Model
{
    public override CarModel Clone() {
        return undefined;
    }
}

但是这不起作用,因为Clone必须是Model类型。这不是我想要的结果,因为CarModel可以实现一个实际返回Clone的{​​{1}}方法。

可以这样做吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:4)

使您的基类通用:

abstract class Model<T>
     where T: Model<T>
{
    public abstract T Clone();
}

class CarModel : Model<CarModel>
{
    public override CarModel Clone()
    {
        return ...
    }
}