Entwickler-Ecke

Sonstiges (.NET) - Problem mit List ( Sicherheitsebene )


Chris1011111 - Di 15.11.11 15:17
Titel: Problem mit List ( Sicherheitsebene )
Hallo,

wie gesagt, ich habe ein Problem:
ich möchte eine Instanzvariable vom Typ System.Collections.Generic.List<> der Klasse "Sector" in der anderen Klasse "OwnUnits" verwenden:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
public class OwnUnits
    {
        // ...

        public void Move_Units()
        {

            // ...

                foreach (Sector sector in Game1.sectors.sectors_list)        // Hier wird der Fehler angezeigt
                {
                    for (int i = 0; i < 8; i++)
                    {
                        if (sector.position == unit.able_sectors_to_move[i])
                        {
                            sector.move_marked = true;
                            if (mouse.LeftButton == ButtonState.Pressed)
                            {
                                unit.position = sector.position;
                            }
                        }
                        else sector.move_marked = false;
                    }
                }
            }
        }
    }

Da bekomme ich jedoch immer den Fehler: "Zugriff aufgrund der Sicherheitsebene nicht möglich.", obwohl die Klasse Sector "public" ist:


C#-Quelltext
1:
2:
3:
4:
5:
6:
public class Sectors
    {
        List<Sector> sectors_list = new List<Sector>();

        // ...
    }



Ich habe jetzt schon viel zu diesem Thema gegoogelt und hier im Forum habe ich auch einige Posts gelesen, in denen ein ähnliches Problem geschildert war. Das konnte mein Problem jedoch nicht lösen.


Gruß, Chris1011111


Ralf Jansen - Di 15.11.11 15:46

sectors_list ist private da die Default Sichtbarkeit eben private ist.
Ich würde dir empfehlen, auch wenn man das darf, nie die Sichtbarkeit wegzulassen sondern immer explizit anzugeben.


Chris1011111 - Di 15.11.11 15:56

Ok, vorher hatte ich sectors_list auch auf "public"

C#-Quelltext
1:
public List<Sector> sectors_list = new List<Sector>();                    

aber da im dieser Zeile immer der Fehler:
" Inkonsistenter Zugriff: Feldtyp "System.Collections.Generic.List<Sector>" ist weniger zugreifbar als Feld "Sectors.sectors_list". "


Ralf Jansen - Di 15.11.11 16:10

Dann ist die Sector Klasse vermutlich nicht public sondern ebenfalls weniger sichtbar. Es hilft ja nicht ein public Feld zu haben das einen Typ liefert den man dann nicht benutzen darf weil dieser z.B. wiederum private ist.


Chris1011111 - Di 15.11.11 16:22

Ohje, ja das wars. Die Sector-Klasse hatte ich ganz übersehen. Manchmal ist man echt blind!
Aber in Zukunft werde ich auf so etwas acht geben.

Vielen Dank für deine Hilfe :D

Gruß, Chris1011111