2012-04-18 24 views
9

Czy istnieje ustalony sposób zwracania tablicy 2-d tylko do odczytu w języku C#?Czytaj tylko tablica dwuwymiarowa w C#

Wiem, że ReadOnlyCollection jest właściwym rozwiązaniem dla tablicy 1-d iz przyjemnością napiszę własną klasę opakowania, która implementuje this[] {get}. Ale nie chcę odkrywać koła, jeśli to koło już istnieje.

+2

Nic nie jest wbudowane w wielowymiarowe tablice afaik – BrokenGlass

+0

Oto kilka odpowiedzi z podobnego pytania na StackOverflow - http://stackoverflow.com/questions/678379/is-there-a-read-only-generic-dictionary-available -in-net –

+0

To nie jest bardzo podobne, @ Skorpion-Prince. –

Odpowiedz

1

Istnieje tylko jeden sposób symulacji tego.

Musisz utworzyć własną klasę z prywatną tablicą.

Najbardziej podobna realizacja tablicy jest indekser:

'10 0,8' Link pokazuje symulację dwuwymiarowego tablicy.

Jeśli zaimplementujesz indeksator tylko z programem pobierającym, użytkownik może tylko odczytać elementy, ale ich nie zapisywać. Jeśli jednak każdy element jest obiektem (typem odniesienia), nie można zapobiec modyfikacji właściwości dostępu do obiektów.

Jednakże, istnieje kilka sposobów symulacji „tylko do odczytu” obiekty:

  • utworzyć klasy otoki, który eksponuje właściwości każdego elementu tablicy jako tylko do odczytu właściwości, tak że nie mogą one być modyfikowane
  • Korzystanie typy wartości pierwotnych (jak int)
  • Pokonanie zmian poprzez zwrot kopii elementu w prywatnej tablicy zamiast oryginalnego elementu w prywatnej tablicy, tak, że zmiany wprowadzone do obiektu nie wpływa na oryginalny obiekt w tablicy.

W innych językach, takich jak C++, istnieją odniesienia i wskaźniki do wartości stałych, ale nie ma ich w języku C#.

3

Niestety, nie ma żadnych wbudowanych implementacji do obsługi obudowy, o którą pytasz. Ale prosta implementacja na własną rękę, nie powinna być czymś trudnym.

Jedynym sądzę, mam nadzieję, że zdajesz sobie sprawę z tego, że zrobisz to tylko do odczytu kolekcja, ale nie elementy wewnątrz tej kolekcji.

Mam nadzieję, że to pomoże.