Publiczna lista w klasie wykorzystywana w tej samej klasie przez metodę ,czy metoda zwracająca listę?
Dane generalnie nie powinny być publiczne więc lista powinna być prywatna lub chroniona.Natomiast funkcja zwracająca tylko wtedy, gdy jest naprawdę potrzebna nazewnątrz. Ciężko powiedzieć nie znając kontekstu.
Pobieram dane do listy i chcę tę listę udostępnić w innej klasie.
Nie zwracaj listy, ale zrób jej kopię i dopiero tą zwróć.
Właściwość po prostu:
public List<string> MyList {get; private set;}
Chodzi mi teraz o to, żeby set był protected ,ale taka konstrukcja nie działa:
private List<double> list = new List<double>();
public List<double> List {
get {return list ;}
protected set { list = value; }
}
Jak nie działa:
class Test
{
private List<double> list = new List<double>();
public List<double> List
{
get { return list; }
protected set { list = value; }
}
}
class Test2 : Test
{
public Test2()
{
List = new List<double>();
}
}
A próbowałeś zmieniać modyfikator z protected na private? Cały czas jest public
Nie wiem o co Ci chodzi, modyfikator jest taki jak go ustawiłeś.
class Test
{
private List<double> list = new List<double>();
public List<double> List
{
get { return list; }
private set { list = value; } // tu zmieniam na private
}
}
class Test2 : Test
{
public Test2()
{
List = new List<double>(); // to tu się wywali
}
}
Może ma życiowy problem z tym że za pomocą właściwości List
może zmieniać pole list
. @_@
Głupoty wypisuje. Ale to jest teraz ok, że w innej klasie(nie potomnej) mogę sobie np. dodawać elementy do listy?
To zależy od Ciebie, jeśli nie chcesz tego to w ogóle ustaw listę jako pole prywatne.
Nie jest ok niezależnie co chcesz robić w innej klasie. W przypadku dwóch wątków operujących na jednej liście może dochodzić do wielu dość "ciekawych" problemów.
Ale nie będę mógł wtedy czytać tej listy w innych klasach.
To niech zwraca IEnumerable
Możesz zrobić:
get { return new ReadOnlyCollection<Item>(myList); }
dla listy niemodyfikowalnej albo
get { return new List<Item>(myList); }
w przypadku gdy inne obiekty mogą coś zmieniać w samej liście. Zmienią wtedy tylko swoją kopię listy.