我正在寻找使用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的错误消息。 那么这是如何工作的?
我之前从未使用过只读属性..
答案 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
,而不会违反合同,即无需重新编译库的使用者。