【问题标题】:Abstract base class within abstract base class [duplicate]抽象基类中的抽象基类[重复]
【发布时间】:2018-07-11 22:23:15
【问题描述】:

我有一个由Foo 继承的抽象基类FooBase。我还有另一个抽象基类BarBaseBar 继承。 BarBase 包含一个抽象的 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; }
}

【问题讨论】:

  • 使用泛型,就像帕特里克的回答所展示的那样

标签: c# inheritance


【解决方案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>
{
}

【讨论】:

    猜你喜欢
    • 2011-06-12
    • 2018-11-06
    • 1970-01-01
    • 2020-03-12
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 2011-10-10
    相关资源
    最近更新 更多