Question inheriting from List(of T) class
我想实现一个优先级队列类。当以更高的优先级添加一个项目时,它被推到队列的前面,而不是添加到队列的末尾。
简单的几行代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Public Class PriorityQueue(Of T) Inherits List(Of T) Private _list As New List(Of T) Public Sub Enque(ByVal item As T, Optional ByVal pushToFront As Boolean = False) If pushToFront = True Then _list.Insert(0, item) Else _list.Add(item) End If End Sub Public Function Deque() As T If _list.Count <> 0 Then Dim item As T = _list(0) _list.RemoveAt(0) Return item Else Throw New InvalidOperationException End If End Function End Class |
现在,调用函数试图找到队列中的元素,因此…
1 2 3 4 |
…
程序打印出0!如果添加count()属性,则一切正常。我本以为继承的类应该调用基类的count函数。注意,即使派生类中没有实现,计数也会以intellisense显示。
您的问题是,您都继承了
更好的办法是你继承
您正在将项目添加到私有列表实例(_list.insert/_list.add)而不是基列表(me.insert/me.add)
实际上,我认为像您这样使用私有列表,添加Count属性比从列表继承更好。
正如Adam Robinson指出的那样,如果您希望类的用户能够(例如)迭代队列中的项目,那么可以考虑实现部分或全部IEnumerable、ICollection、ICollection和IEnumerable。
如果您的调用者只将其用作队列(调用排队或出列),则这不是严格必要的。
标准队列类queue