如何创建常量列表

时间:2015-08-04 10:42:58

标签: vb.net list const shared

我在另一个具有名为SampleRating的公共访问权限的类中有一个类。 有一个名为SampleRating的{​​{1}}类型的对象列表。 存储在列表项中的数据在初始设置后不应更改,仅查询。列表本身也应该永远不会改变。

制作列表及其中的值的正确方法是什么,具有只读属性?我尝试了SampleRatingsConst,但编译器抱怨两者。

我的班级和名单:

Static

1 个答案:

答案 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)。