我有一个由FooBase
继承的抽象基类Foo
。我有另一个由BarBase
继承的抽象基类Bar
。 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; }
}
答案 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>
{
}