Ho una classe pubblica nel mio progetto VB.NET che ha una proprietà List(Of String)
. Questo elenco deve essere modificato da altre classi all'interno del progetto, ma dal momento che la classe potrebbe (in futuro) essere esposta al di fuori del progetto, voglio che non sia modificabile al livello, a . La modifica della proprietà esistente all'interno del progetto verrà eseguita solo chiamando i metodi dell'elenco (in particolare), non sostituendo il valore della proprietà con un nuovo Elenco (è il motivo per cui lo ho come proprietà ReadOnly
).Creare una proprietà Elenco che non può essere modificata esternamente
Sono venuto su con un modo di farlo, ma non sono sicuro che sia esattamente quello che si chiama "elegante".
E 'questo:
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
Ora questo solo funziona bene e dandy. Qualsiasi classe nel progetto che accede direttamente al campo mlst_ParameterNames
può modificarla come necessario, ma qualsiasi procedura che acceda tramite la proprietà pubblica può modificarla a piacimento, ma non porterà da nessuna parte poiché la procedura di proprietà restituisce sempre un copia della lista, non la lista stessa.
Ma, naturalmente, ciò comporta un sovraccarico che è il motivo per cui sento che è solo ... beh, visceralmente "sbagliato" ad un certo livello, anche se funziona.
L'elenco dei parametri non sarà mai enorme. Al massimo conterrà solo 50 voci, ma più comunemente meno di dieci elementi, quindi non riesco a vedere che sia mai stato un killer delle prestazioni. Tuttavia, ovviamente mi ha fatto pensare che qualcuno, con molte più ore VB.NET sotto la cintura, possa avere un'idea molto più pulita e pulita.
Chiunque?
penso che la vostra soluzione è buona sufficienti e non avete bisogno di qualsiasi altra workaroung – SysDragon
@SysDragon: in base al numero di elementi della collezione, sono d'accordo. – Paul