我在另一个具有名为SampleRating
的公共访问权限的类中有一个类。
有一个名为SampleRating
的{{1}}类型的对象列表。
存储在列表项中的数据在初始设置后不应更改,仅查询。列表本身也应该永远不会改变。
制作列表及其中的值的正确方法是什么,具有只读属性?我尝试了SampleRatings
或Const
,但编译器抱怨两者。
我的班级和名单:
Static
答案 0 :(得分:1)
如果您想确保列表和列表项都是只读的,那么您必须做两件事。
首先,您需要使用ReadOnlyCollection而不是列表。基本上,您通常使用标准List对象创建列表,一旦完成,您可以调用List上的AsReadOnly方法来获取ReadOnlyCollection。
您要做的第二件事是创建read-only properties。根据您的需要,您还可以考虑为您的房产添加一个私人设置器...根据定义,它不会是一个只读属性,但是设置器不会暴露在您的课堂之外,所以它将阻止任何其他对象更改您的属性值。
<强>更新强>
您提到不应该从Bar函数修改该属性...这里的问题是您试图阻止在SampleRatings
中修改同时用于初始化{的类{1}}。
请注意以下示例中的私有setter。如果它是私密的,则无法初始化SampleRatings
,但如果您将其公开,则可以在SampleRatings
函数中更改它。
Bar
您没有提到为什么要首先阻止修改列表...如果您想阻止外部程序集的修改,您应该考虑将您的setter声明为Public Class Foo
Public Class SampleRating
Private _noise As UInt16
Public Property Noise() As UInt16
Get
Return _noise
End Get
Private Set(ByVal value As UInt16)
_noise = value
End Set
End Property
End Class
'If the noise is read-only (or has a private setter), you won't be able to set the noise value here...
Public Shared SampleRatings As New ReadOnlyCollection(Of SampleRating)(New List(Of SampleRating)() From {
New SampleRating With {.Noise = 467},
New SampleRating With {.Noise = 260},
New SampleRating With {.Noise = 100},
New SampleRating With {.Noise = 38}
})
Shared Function Bar()
'Doesn't work
SampleRatings.Remove(SampleRatings.First())
'Doesn't work
SampleRatings.First().Noise = 1
End Function
End Class
(请参阅Access Levels in Visual Basic)。