Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LinkedList实施责任链_C#_Generics_Linked List_Chain Of Responsibility - Fatal编程技术网

C# 使用LinkedList实施责任链

C# 使用LinkedList实施责任链,c#,generics,linked-list,chain-of-responsibility,C#,Generics,Linked List,Chain Of Responsibility,我很难理解这一点,我希望有人能帮助我 我有一个Chain of Responsibility类,我想知道我是否可以(并且希望)将其作为LinkedList类的派生实现。当然,责任链的核心是一个链表,但我不确定从LinkedList派生是否真的合适,因为如果当前方法失败,每个实现的方法都需要能够在后续方法中调用相同的方法 您是否可以实现类似于公共类MyHandler:LinkedList的功能?这似乎是一个递归定义,但是编译器不认为这是个问题。 有人对此有什么见解吗?是的,您可以从LinkedLi

我很难理解这一点,我希望有人能帮助我

我有一个Chain of Responsibility类,我想知道我是否可以(并且希望)将其作为LinkedList类的派生实现。当然,责任链的核心是一个链表,但我不确定从LinkedList派生是否真的合适,因为如果当前方法失败,每个实现的方法都需要能够在后续方法中调用相同的方法

您是否可以实现类似于公共类MyHandler:LinkedList的功能?这似乎是一个递归定义,但是编译器不认为这是个问题。
有人对此有什么见解吗?

是的,您可以从
LinkedList
继承,就像您可以从任何非类继承一样。然而,我认为这不是一个好主意。继承不仅仅是重复使用方法。它传达了一种情感。虽然责任链模式当然可以使用链表实现,但责任链不是链表

LinkedList
类派生时,将公开其所有公共方法。你还应该问,所有这些方法是否对你的类有意义。我认为这对责任链没有任何意义

相反,您应该将处理程序存储在一个链表中,该链表是您的责任链实现的私有数据成员

你能实现像公共类MyHandler:LinkedList这样的东西吗?这似乎是一个递归定义,但是编译器不认为这是个问题。 是的,这是完全合法的。它是一个递归定义,可以在实现时派上用场,例如。这会


我建议不要以这种方式编写类,因为你的责任链不应该继承自
LinkedList
,但这是可能的。

哦,我应该补充一点,我在谷歌上搜索过,没有发现任何东西将CoR作为LinkedList的派生实现,这对我来说意味着你要么不能,或者这不是一个好主意。有趣的问题-你们能给出一个更详细的细节或者CoR如何工作的例子吗?不一定是代码,而是过程。其想法是将处理程序按顺序添加到链表中,然后调用链中最上面的一个,如果失败,它会自动调用链中下一个处理程序中的相同方法(例如,MyHandler.Succession,它也是MyHandler)。我认为LinkedList就是为此而设计的,并且已经实现了很多我想添加到类中的方法(AddFirst、AddLast、Next等)。关于.Average,您有一个很好的观点,但我在几个地方看到的一个例子是LinkedList,平均数也不适用。为什么不适用?您可以计算平均字符串长度。您还可以将数字存储在其字符串表示形式中,并通过将数字转换为十进制来计算平均值。无论如何,这只是一个示例。如果你看一下接口,有很多方法对责任链没有意义,包括and。虽然你可以将Average实现为平均字符串长度,但这使得我们假设Average在该实例中应该这么做。不过,这并不是一个预先定义的、显而易见的假设。无论如何,现在我更仔细地研究了.Net对LinkedList的实现,它显然不是我想要的。本质上,我认为我要寻找的是LinkedListNode的等价物,因为每个方法都必须访问链中的下一个节点,但这是一个密封的类。没错,许多扩展方法都不适用,尽管LinkedList的所有基本方法以及一些扩展方法(例如,Where)都是可取的. 我会重新思考我在做什么,看看有什么意义。