抽象基类中的抽象基类

时间:2018-02-01 14:41:18

标签: c# inheritance

我有一个由FooBase继承的抽象基类Foo。我有另一个由BarBase继承的抽象基类BarBarBase包含一个抽象的FooBase属性。在Bar中,我想将FooBase属性设置为Foo。为什么不允许这样做?这是一个需要重新思考的疯狂设计,还是可以通过某种方式完成?

public abstract class FooBase
{
}

public class Foo : FooBase
{
}

public abstract class BarBase
{
    public abstract FooBase Foo { get; set; }
}

public class Bar : BarBase
{
    public override Foo Foo { get; set; }
}

1 个答案:

答案 0 :(得分:1)

因为覆盖时无法更改签名。期。这就是C#的设计方式。这里更好的解决方案是使用泛型:

public abstract class FooBase
{
}

public class Foo : FooBase
{
}

public abstract class BarBase<F> where F : FooBase
{
    public F Foo { get; set; }
}

public class Bar : BarBase<Foo>
{
}