Listy i enkapsulacja - publiczna lista czy metoda zwracająca listę?

0

Publiczna lista w klasie wykorzystywana w tej samej klasie przez metodę ,czy metoda zwracająca listę?

0

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.

0

Pobieram dane do listy i chcę tę listę udostępnić w innej klasie.

1

Nie zwracaj listy, ale zrób jej kopię i dopiero tą zwróć.

0

Właściwość po prostu:

public List<string> MyList {get; private set;}
0

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; }
} 
0

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>();
        }
    }
0

A próbowałeś zmieniać modyfikator z protected na private? Cały czas jest public

0

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
        }
    }
0

Może ma życiowy problem z tym że za pomocą właściwości List może zmieniać pole list. @_@

0

Głupoty wypisuje. Ale to jest teraz ok, że w innej klasie(nie potomnej) mogę sobie np. dodawać elementy do listy?

0

To zależy od Ciebie, jeśli nie chcesz tego to w ogóle ustaw listę jako pole prywatne.

0

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.

0

Ale nie będę mógł wtedy czytać tej listy w innych klasach.

0

To niech zwraca IEnumerable

0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1