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

标签 .net vb.net inheritance list

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

简单的几行代码

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/

相关文章:

asp.net - 处理 DatePicker 中的空引用

c# - 优化 Windows 窗体加载时间

mysql - 执行命令时遇到 fatal error

c# - System.Text.StringBuilder.ToString() 处的 System.OutOfMemoryException 与 Excel XML 字符串

包含任何类型的模板类对象的 C++ 映射

java - 如何检查子类的类型?

c++ - 继承嵌套模板类的特化

c# - 确切地说,MemoryCache的内存限制是什么意思?

C# WPF : Listbox with drag to select text

c# - 在这种情况下最好实现 ObservableBase 还是有其他方法?