簡體   English   中英

如何從抽象基類多重繼承?

[英]How to mulitiply inherit from abstract base classes?

我有一些抽象基類可用於多個實現。

基類:

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 變得不僅僅是一個簡單的屬性,事情就會變得丑陋。 有沒有更好的方法來創建這種結構?

提前致謝,
坦率

我強烈建議支持組合而不是繼承- 正如 GoF 所支持的那樣。 這樣你就不會繼承給定的類,而只是使用它的一個實例。 然后,您可以輕松擁有所有屬性而無需任何重復:

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; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM