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 個未満のアイテムしか含まれないため、これがパフォーマンス キラーになることはないと思います。しかし、もちろん、VB.NET の使用時間をはるかに長くしている誰かが、もっときちんとした、よりクリーンなアイデアを持っているのではないかと考えるようになりました。
誰?