gpt4 book ai didi

c# - 我可以子类化一个抽象类,它有另一个抽象类也被子类化吗? (C#)

转载 作者:太空宇宙 更新时间:2023-11-03 19:36:49 25 4
gpt4 key购买 nike

假设我想设计一个抽象系统来计算文档中的部分。我设计了两个类,DocumentSection,文档有一个 section 列表和一个计算它们的方法。

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

现在,我希望能够在多个场景中使用此代码。例如,我有带章节的书。 Book 是 Document 的子类,而 Chapter 是 Section 的子类。这两个类都将包含额外的字段和功能,与部分的计数无关。

我现在遇到的问题是,因为 Document 包含部分,而不是章节,所以 Chapter 的添加功能对我来说没用,它只能将作为部分添加到 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>

我不得不在 Protocol Buffers 中执行此操作,这很麻烦 - 但它确实允许您以强类型方式引用这两种方式。如果你能摆脱它,我会选择第一个版本。

关于c# - 我可以子类化一个抽象类,它有另一个抽象类也被子类化吗? (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1016990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com