gpt4 book ai didi

.net - 继承自 List(of T) 类的问题

转载 作者:行者123 更新时间:2023-12-04 17:05:57 25 4
gpt4 key购买 nike

我想实现一个优先队列类。当以更高的优先级添加项目时,它将被推到队列的前面,而不是添加到队列的末尾。

简单的几行代码

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

现在调用函数试图找到队列中的元素
……
dim _q as new PriorityQueue(Of integer)
_q.Enque(1)
_q.Enque(2)
msgbox(_q.Count())

......

程序打印出 0!如果添加一个 Count() 属性,那么一切都很好。
我原以为继承的类应该调用基类的 Count 函数。
请注意,即使我在派生类中没有实现,计数也会显示在智能感知中。

最佳答案

你的问题是你们都继承自 List(of T)并且您有一个该类型的实例属性,这是您存储数据的位置。当Count在上面的代码中调用,它使用 Count你 parent 的属性(property)List(of T) ,这不是您存储数据的位置。

一个更好的主意是让你继承 object并拥有 PriorityQueue(of T)实现ICollectionIEnumerable(of T)明确地。你根本不需要改变你的内部实现,你只需要添加代码来支持这些接口(interface)。

关于.net - 继承自 List(of T) 类的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/794679/

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