大佬教程收集整理的这篇文章主要介绍了vb.net – 创建一个无法在外部更改的List属性,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想出了一种方法,但我不确定它是什么,你会称之为“优雅”.
就是这样:
Friend mlst_ParameterNames As List(Of String) = New List(Of String) Public ReadOnly Property ParameterNames() As List(Of String) Get Return New List(Of String)(mlst_ParameterNames) End Get End Property
现在,这只是工作正常和花花公子.项目中直接访问mlst_ParameterNames字段的任何类都可以根据需要对其进行修改,但是通过公共属性访问它的任何程序都可以将其修改为内容,但由于属性过程总是返回一个,因此无处可去.列表的副本,而不是列表本身.
但是,当然,这带来了开销,这就是为什么我觉得它只是……好吧,在某种程度上看起来“错误”,即使它有效.
参数列表永远不会很大.它最多只包含50个项目,但通常少于10个项目,所以我看不出这是一个性能杀手.然而,它当然让我认为有些人可以拥有更加整洁和清洁的想法.
任何人?
Friend mlst_ParameterNames As List(Of String) = New List(Of String) Public ReadOnly Property ParameterNames() As ReadOnlyCollection(Of String) Get Return mlst_ParameterNames.AsReadOnly() End Get End Property
根据MSDN:
这意味着无论列表的大小如何,AsReadOnly方法的速度都是相同的.
除了潜在的性能优势之外,列表的只读版本会自动与原始列表保持同步,因此如果使用代码保留对它的引用,则其引用的列表仍将是最新的,即使稍后将项目添加到列表中或从列表中删除.
此外,该列表是真正的只读.它没有Add或Clear方法,因此使用该对象的其他人不会产生混淆.
或者,如果您只需要消费者能够遍历列表,那么您可以将该属性公开为IEnumerable(Of String),这本质上是一个只读接口:
Public ReadOnly Property ParameterNames() As IEnumerable(Of String) Get Return mlst_ParameterNames End Get End Property
但是,这使得访问For Each循环中的列表变得有用.例如,您无法通过索引获取Count或访问列表中的项目.
作为旁注,我建议添加第二个Friend属性,而不是简单地将字段本身作为朋友公开.例如:
Private _parameterNames As New List(Of String)() Public ReadOnly Property ParameterNames() As ReadOnlyCollection(Of String) Get Return _parameterNames.AsReadOnly() End Get End Property Friend ReadOnly Property WritableParameterNames() As List(Of String) Get Return _parameterNames End Get End Property
以上是大佬教程为你收集整理的vb.net – 创建一个无法在外部更改的List属性全部内容,希望文章能够帮你解决vb.net – 创建一个无法在外部更改的List属性所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。