覆盖列表(Of).添加行为

Ang*_*Bad 1 vb.net generics

我带着这个公共财产来上课

Private _tickets As List(Of Ticket)
Public Property Ticekts() As List(Of Ticket)
    Get
        Return _tickets
    End Get
    Set(ByVal value As List(Of Ticket))
        _tickets = value
    End Set
End Property
Run Code Online (Sandbox Code Playgroud)

当我调用add方法时,我必须在添加票证之前执行一些逻辑.

逻辑不是一个重要的主题,但我最终必须删除一些票,然后添加新票.

我怎样才能做到这一点?

Phi*_*hil 8

您需要按如下方式派生自己的集合:

C#版本:

public class MyList<T> : Collection<T>
{
    protected override void InsertItem(int index, T item)
    {
        // your checks here
        base.InsertItem(index, item);
    }
}
Run Code Online (Sandbox Code Playgroud)

List<T>没有虚拟方法,因此您无法覆盖添加. Collection<T>有虚拟的InsertItem,SetItem,RemoveItem和ClearItems.

VB.NET版本:

Public Class List(Of T) 
    Inherits Collection(Of T)

    Protected Overrides Sub InsertItem( index As Integer, item As T )
        'your checks here
        MyBase.InsertItem(index, item)
    End Sub

End Class
Run Code Online (Sandbox Code Playgroud)

  • @Angelodev - 不是主题,而是错误的.NET语言.Phil - 如果问题出在VB.NET中,你应该有一个VB.NET答案(有一个_extra_ C#示例是奖励,但是OP并没有要求C#). (4认同)
  • @Angelodev - 添加了VB.Net版本.我本可以用伪代码回答,这是重要的方法,而不是语言. (3认同)
  • 这是一个很好的解决方案,但本主题讨论的是VB.NET (2认同)