2013-02-19 17 views
5

Obecnie tworzę własną bardzo podstawową klasę ogólną listę klasy (aby lepiej zrozumieć, jak działają te predefiniowane). Mam tylko problem polegający na tym, że nie mogę dotrzeć do elementów wewnątrz tablicy, jak to zwykle bywa na przykład, używając "System.Collections.Generic.List".Ogólna lista klas w C#

GenericList<type> list = new GenericList<type>(); 
list.Add(whatever); 

Działa to dobrze, ale podczas próby dostępu „cokolwiek” Chcę, aby móc napisać :

list[0]; 

Ale to oczywiście nie działa ponieważ jestem wyraźnie czegoś brakuje w kodzie, co muszę dodać do mojej w pełni działającej klasy ogólnej?

+0

Co robi swoją klasę 'GenericList' wygląda jak? – LukeHennerley

+0

Nawiasem mówiąc, jedną z funkcji, która może być użyteczna na liście ogólnej, jest metoda 'public void ActOnElement (indeks int, ActByRef proc, ref TP1 param1) {proc (ref Array [index], ref TP param1); } 'która pozwoli kodowi działać bezpośrednio na pozycji listy [przyjmij' public delegate void ActByRef (ref T1 p1, ref T2 p2); ']. Jeśli masz np. a 'GenericList ', taka metoda może pozwolić kodowi na wypowiedzenie 'myList.ActOnItem (index, (ref Rectangle r, ref int v) => {rX - = v; r.Width + = v;}, ref widthAdjust) aby zaktualizować element listy "w miejscu". – supercat

Odpowiedz

12

To się nazywa indexer, napisane tak:

public T this[int i] 
{ 
    get 
    { 
     return array[i]; 
    } 
    set 
    { 
     array[i] = value; 
    } 
} 
+0

Podejrzewam, że OP może oznaczać, że otrzymuje 'Tylko przydział, wywołanie, inkrementacja, dekrementacja i nowe wyrażenia obiektów mogą być używane jako wyrażenie' podczas uzyskiwania dostępu do instancji 'GenericList'? Oczywiście, jeśli nie może on uzyskać dostępu do indeksu, to odpowiedź jest w porządku :) – LukeHennerley

+0

@LukeHennerley Uważam, że PO szukał deklaracji własności, aby umieścić ją w ich typie "GenericList", tak aby: biorąc pod uwagę instancję 'Listy listy ogólnej ', mogą uzyskać dostęp do elementu w nim za pomocą indeksera, np. 'list [0]'. –

+0

Podejrzewałem tak samo, tylko myślałem o tym, jak można błędnie zinterpretować PO. W każdym razie +1 :) – LukeHennerley

1

myślę, wszystko co musisz zrobić, to wdrożenie IList<T>, aby uzyskać wszystkie podstawowe funkcje

public interface IList<T> 
    { 

    int IndexOf(T item); 

    void Insert(int index, T item); 

    void RemoveAt(int index); 

    T this[int index] { get; set; } 
    }