c# - 使用 LinkedList 实现责任链

标签 c# generics linked-list chain-of-responsibility

我很难解决这个问题,我希望有人能帮助我。

我有一个责任链类,我想知道我是否可以(并且愿意)将其实现为 LinkedList 类的派生类。从本质上讲,责任链当然是一个链表,但我不确定从 LinkedList 派生在这里是否真的合适,因为每个实现的方法都需要能够在后继方法中调用相同的方法,如果当前失败。

你能实现类似 public class MyHandler : LinkedList<MyHandler> 的东西吗? ?这看起来像是一个递归定义,但编译器并不认为这是一个问题。

有人对此有任何见解吗?

最佳答案

是的,您可以从 LinkedList 继承,就像您可以从任何非 sealed 继承一样。类(class)。但是,我认为这不是一个好主意。继承不仅仅是为了重用方法。它传达了 "is a" relationship 。虽然责任链模式当然可以使用链表来实现,但责任链不是链表。

当从 LinkedList 类派生时,您将公开它的所有公共(public)方法。您还应该询问所有这些方法是否对您的类(class)有意义。我不认为LinkedList.Average()对责任链有意义。

您应该将处理程序存储在链接列表中,该列表是责任链实现的私有(private)数据成员。

Can you implement something like public class MyHandler : LinkedList? That seems like a recursive definition, but the compiler doesn't consider it a problem.

是的,这是完全合法的。这是一个递归定义,在实现 composite pattern 时可以派上用场。 , 例如。这将

我建议不要以这种方式编写类,原因与您的责任链不应继承自 LinkedList 的原因相同,但这是可能的。

关于c# - 使用 LinkedList 实现责任链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6935062/

相关文章:

c# - 无法将类型 'Task<System.Collections.Generic.IEnumerable<IClass>>' 隐式转换为 'System.Collections.Generic.IEnumerable<IClass>

将列表连接成列表并在c中打印列表的列表(链表的链表)

c# - 从链表中删除

C:如何释放链表中的节点?

c# - .Net 3D物理引擎的建议

c# - Entity Framework 7 和 SQLite 表不创建

c# - 嵌套 $expands 的 Asp.net WebApi OData V4 问题

c# - 设计帮助——多态事件处理

java.util.Collections 上的 Java 泛型警告

c# - 如何将数据强制转换为方法约束中指定的泛型?