簡體   English   中英

我可以對一個抽象類進行子類化,而該抽象類又具有另一個子類嗎? (C#)

[英]Can I subclass a abstract class which has another abstract class which is also subclassed? (C#)

可以說我想設計一個抽象系統來對文檔中的部分進行計數。 我設計了兩個類, DocumentSection ,該文檔有一個節列表和一個計算它們的方法。

public abstract class Document {
  List<Section> sections;

  public void addSection(Section section) { 
    sections.Add(section);
  }
  public int sectionCount() { 
    return sections.count;
  } 
}
public abstract class Section {
  public string Text;
}

現在,我希望能夠在多重場景中使用此代碼。 例如,我有帶有章節的書。 該書將是Document的子類,而Chapter將是Section的子類。 這兩個類都將包含與字段計數無關的額外字段和功能。

我現在偶然發現的問題是,因為文檔包含章節而不是章節,所以章節的添加功能對我來說毫無用處,因此只能將其作為章節添加到Book中。

我當時在閱讀有關垂頭喪氣的文章,但實際上認為這不是正確的方法。 我在想也許我完全采用了錯誤的方法。

我的問題是這樣的:我如何設計這樣一個抽象系統,該系統可以被子類對象重用,這是可行的方法嗎?

您需要泛型:

public abstract class Document<T> where T : Section

public abstract class Section

public class Book : Document<Chapter>

public class Chapter : Section

您可能想讓一個部分知道它可以屬於哪種類型的文檔。 不幸的是,這變得更加復雜:

public abstract class Document<TDocument, TSection>
    where TDocument : Document<TDocument, TSection>
    where TSection : Section<TDocument, TSection>

public abstract class Section<TDocument, TSection>
    where TDocument : Document<TDocument, TSection>
    where TSection : Section<TDocument, TSection>

public class Book : Document<Book, Chapter>

public class Chapter : Section<Book, Chapter>

我必須在協議緩沖區中執行此操作,而且比較麻煩-但是它確實允許您以強類型的方式引用這兩種方式。 如果可以的話,我會選擇第一個版本的。

暫無
暫無

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

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