vb.net类只读属性作为列表(T)

时间:2016-05-02 14:38:03

标签: vb.net list class properties readonly

我正在寻找使用read-only property as list(of T)

的示例
Public ReadOnly Property oList As List(Of String)
Get
    Return ...
End Get

当我通常使用list(of T)时,我总是在我的变量类型New前面使用Public Property oList as New list(of T)构造函数

但是当我现在这样做时,我收到来自Visual Studio的错误消息。 那么这是如何工作的?

我之前从未使用过只读属性..

1 个答案:

答案 0 :(得分:4)

这是一个简单的例子:

Private myList As New List(Of String)

Public ReadOnly Property List As List(Of String)
    Get
        Return myList
    End Get
End Property

或者,使用自动初始化的只读属性(在Visual Studio 2015中支持,即VB14及更高版本):

Public ReadOnly Property List As List(Of String) = New List(Of String)

现在,消费者可以在列表中添加和删除:

myObject.List.Add(...)
myObject.List.Remove(...)

但他们无法取代整个列表:

myObject.List = someOtherList ' compile error
myObject.List = Nothing       ' compile error

这有一些优点:

  • 始终确保List永远不会Nothing的不变量。
  • 你班上的消费者不能做反直觉的事情,比如"连接"两个对象的列表:

    myObject1.List = myObject2.List   ' Both objects reference the same list now
    

作为旁注,我建议在这种情况下公开接口IList)而不是具体的类:

Public ReadOnly Property List As IList(Of String) = New List(Of String)

这为您提供了上述所有功能。此外,您可以稍后将列表的具体类型更改为MyFancyListWithAdditionalMethods,而不会违反合同,即无需重新编译库的使用者。