VB   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了vb.net – 创建一个无法在外部更改的List属性大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的VB.NET项目中有一个公共类,它有一个List(Of String)属性.该列表需要由项目中的其他类修改,但由于该类可能(在将来的某个时间)暴露在项目之外,我希望它在该级别上是不可修改的.修改项目中的现有属性只能通过调用列表的方法(特别是.Add,偶尔.Clear)来完成,而不是通过用新列表批量替换属性值(这就是为什么我将它作为一个ReadOnly属性).

我想出了一种方法,但我不确定它是什么,你会称之为“优雅”.

就是这样:

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个项目,所以我看不出这是一个性能杀手.然而,它当然让我认为有些人可以拥有更加整洁和清洁的想法.

任何人?

您应该使用AsReadOnly方法获取列表的只读版本,而不是创建原始列表的新副本,如下所示:
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,请注明来意。