Mam klasy publiczne w moim projekcie VB.NET, który ma właściwość List(Of String)
. Ta lista musi zostać zmodyfikowana przez inne klasy w ramach projektu, ale ponieważ klasa może (w pewnym momencie w przyszłości) zostać ujawniona poza projektem, chcę, aby była niemodyfikowalna na poziomie na poziomie. Modyfikacja istniejącej nieruchomości w ramach projektu zostanie wykonana tylko przez wywołanie metod listy (szczególnie .Add
, sporadycznie .Clear
), a nie przez hurtowe zastąpienie wartości nieruchomości nową listą (dlatego mam ją jako właściwość ReadOnly
).Tworzenie właściwości listy, której nie można zmienić zewnętrznie
mam wymyślić sposób to zrobić, ale nie jestem pewien, że to jest dokładnie to, co można by nazwać „elegancki”.
Jest to:
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
Teraz to po prostu działa cacy. Każda klasa w projekcie, która uzyskuje dostęp do pola mlst_ParameterNames
bezpośrednio, może ją modyfikować w razie potrzeby, ale wszelkie procedury, które uzyskują dostęp do niej za pośrednictwem właściwości publicznej, mogą odegrać kluczową rolę w modyfikacji jej zawartości, ale nie będą miały miejsca, ponieważ procedura właściwości zawsze zwraca kopię listy, a nie samą listę.
Ale oczywiście, że niesie ze sobą obciążenie, dlatego uważam, że jest po prostu ... no cóż, trzewiowo "źle" na pewnym poziomie, nawet jeśli działa.
Lista parametrów nigdy nie będzie ogromna. Co najwyżej zawiera tylko 50 pozycji, ale zwykle mniej niż dziesięć przedmiotów, więc nie widzę, by kiedykolwiek był to performer-zabójca. Jednak oczywiście przekonał mnie, że ktoś z dużo większą liczbą godzin VB.NET może mieć o wiele lepszy i bardziej przejrzysty pomysł.
Ktoś?
myślę własne rozwiązanie jest dobre oraz wystarczająco i nie trzeba żadnych innych workaroung – SysDragon
@SysDragon: na podstawie liczby elementów w kolekcji, zgadzam się. – Paul