如何从抽象基类中继承?

时间:2020-11-11 10:15:33

标签: c# inheritance multiple-inheritance

我有一些抽象基类可用于多种实现。

基类:

public abstract class BaseX
{
    public string A { get; set; }
}

public abstract class BaseY : BaseX
{
    public string B { get; set; }
}

对于每个用例,我想从这些基类中创建特定的类,例如:

public abstract SpecificX : BaseX
{
    public string C { get; set; }
}

public abstract SpecificY : BaseY
{
    public string D { get; set; }
}

SpecificY派生的所有类都应包含所有属性A,B,C,D。

我现在的问题是SpecificY不具有SpecificX的属性C,因为我不能像这样进行多重继承

public abstract SpecificY : BaseY, SpecificX

我唯一的想法是使用这样的接口:

public Interface ISpecificX
{
    string C { get; set; }
}

public abstract SpecificX : BaseX, ISpecificX
{
    public string C { get; set; }
}

public abstract SpecificY : BaseY, ISpecificY
{
    public string D { get; set; }
    public string C { get; set; } <== redundancy
}

但是我需要两次实现C。一旦C变得不仅仅是一个简单的Property,事情就会变得丑陋。有没有更好的方法来创建这种结构?

先谢谢了,
弗兰克

1 个答案:

答案 0 :(得分:2)

我强烈建议favour composition over inhertiance-根据政府建议。这样,您就不会继承给定的类,而只是使用它的一个实例。然后,您可以轻松拥有所有属性而无需重复:

class BaseX { ... }
class BaseY { ... }

class SpecificY : BaseY
{
    private readonly SpecificX b = new SpecificX();
    public string A { get => this.b.A; set => this.b.A = value; } // delegate the call
    public string B { get; set; }
    public string C { get => this.b.C; set => this.b.C = value; } // delegate the call
    public string D { get; set; }
}