Masz racje Deti - rozumiem że jest to klasa.
Teraz sprecyzuje moje pytanie :) Chcę żeby do tej listy był bezpośredni dostęp z poziomu innych klas.
I tak dla przykładu: dodaje do projektu klasę Obiekt a w niej metodę DodajElement ktora bedzie dodawała elementy do lMojaLista
Intuicyjnie, zakladam że lista jest widziana w tej klasie więc defincja Obiektu wyglada nastepujaco:
public class Obiekt {
public void DodajElemnet(){
MojaList.Add(5);
}
}
Czy takie bezposrednie odwolanie sie do Listy da się zrealizować? Wiem że jednym z możliwych rozwiązań jest przekazanie referencyjne Listy w konstruktorze klasy Obiekt. Zastanawiam się jednak, czy nie jakiegos innego rozwiązania tego problemu. Z listy tej bedzie korzystało wiele klas, więc to chyba nie jest dobre rozwiazanie przekazywanie jej do kazdej z tych klas.
Trzeba tu rozważyć 2 aspekty:
- Z czyste technicznego punktu widzenia - jest to jak najbardziej możliwe. O tym za chwilę.
- Z punktu widzenia OOP - koszmar. Lepiej będzie enkapsulować wybrane elementy klasy - np. tą listę.
Co do pytania : Twoja forma jest budowana w pliku Program.cs - tam powinieneś zajrzeć. Zobacz co robi metoda Main():
Application.Run(new Form1());
Możesz sobie ten kod zmodyfikować - np. dodać tu twoją listę (w końcu nie musi być ona koniecznie w definicji formy.
Twoją listę możesz też zadeklarować w formie jako public static - (chyba, że będziesz tworzył wiele! instancji twojej klasy Form1 - ale w to wątpię. W takim wypadku Lista byłaby wspólna dla wszystkich form - i dla całej aplikacji oczywiście).
I
pytanie pomocnicze: podczas referencji, mowia po chłopsku, powstaje nazwa ktora wskazuje na pamiec obiektu? Obiekt nie jest kopiowany, czyli nie jest zajmowana dodatkowa pamięć tak jak w przypadku przekazywania bez ref?
Trochę tu pomyliłeś. W C# są 2 rodzaje typów - proste (Value type) i "referencyjne" (Reference Type). Oba przypadki różną się gdy mówimy o przekazywaniu do funkcji przez ref.
W twoim przypadku Forma jest klasą więc Reference Type - gdybyś przekazał taki obiekt do funkcji przez ref forma, przekazał byś sam wskaźnik. Gdyby teraz w funkcji nastąpiło:
forma=null;
.. stracił byś ten obiekt bezpowrotnie (chyba, że istniałyby inne zmienne, które wskazują na obiekt formy - wtedy Garbage Collector nie usunął by jej ze sterty).
.. ale się rozpisałem - temat jest niestety dość duży :-)