Autor Beitrag
goose
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: Fr 13.04.07 01:54 
Hallo,

eine kurze Frage zur sichtbarkeit von Klassen in C# bzw .NET

Also folgendes :

ausblenden volle Höhe 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:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
namespace GSE_Check
{
    public class GSEArchiv
    {
        #region Class GSE
        public class GSE
        {
            public enum GSEState { GREEN, YELLOW, RED };
            
            private GSEState m_State = GSEState.GREEN;
            public GSEState State
            {
                get {
                    if (this.m_Remarks != String.Empty && this.m_State != GSEState.RED)
                        this.m_State = GSEState.YELLOW;
                    return m_State; 
                }
                set { m_State = value; }
            }

            private double m_hours = 0.00;
            public double Hours
            {
                get { return m_hours; }
                set { m_hours = value; }
            }

            private string m_Name = String.Empty;
            public String Name
            {
                get { return m_Name; }
                set { m_Name = value; }
            }

            private string m_Remarks = String.Empty;
            public string Remarks
            {
                get { return m_Remarks; }
                set { m_Remarks = value; }
            }

            public GSE(string Name)
            {
                this.m_Name = Name;
            }
        };
        #endregion Class GSE

        private List<GSE> m_GSEList = new List<GSE>();
        // Indexer
        public GSE this[int index]
        {
            get { return m_GSEList[index]; }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="args">GSE-Name</param>
        public void AddGSE(string GSEName)
        {
            m_GSEList.Add(new GSE(GSEName));
        }

        public int Count
        {
            get { return m_GSEList.Count; }
        }
    };
}


Hierbei kann man über
ausblenden C#-Quelltext
1:
GSEArchiv.GSE g = new GSEArchiv.GSE("test");					


ein Objekt vom Typ GSE erstellen.
Wie kann ich das verhindern ?

Ich muss aber auch irgendwie noch darauf zugreifen können über den Indexer, das bitte nicht vergessen, denn das ist das Problem.
Ich bekomme, sobald ich die Klasse GSE private mache eine Fehlermeldung das die Klasse weniger zugreifbar ist. Ist ja auch so. Ich weiß nur nicht ob ich das jetzt so richtig mache oder ob das nicht geht oder ob ich einen Denkfehler habe irgendwo ?

Bitte um Hilfe !
Danke

Matthias
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 13.04.07 09:34 
Das ist doch klar: Du hast einen Indexer mit Sichtbarkeit public vom Typ GSEArchiv.GSE. Wie soll der denn eine Klasse zurückliefern können, die weniger sichtbar ist?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
goose Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: Sa 14.04.07 00:20 
Hallo,

warum wiederholst Du was ich schon geschrieben hatte ?

Zitat:

Hierbei kann man über

GSEArchiv.GSE g = new GSEArchiv.GSE("test"); ein Objekt vom Typ GSE erstellen.



Wie kann ich das verhindern ?

Das war die Frage !?
Bitte etwas genauer lesen ... Danke

Matthias
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 14.04.07 00:59 
Entschuldige vielmals, dass ich eine Fehler gemacht habe, als ich Dir helfen wollte. Deine Reaktion ist in keiner Weise übertrieben und regt in hohem Maße dazu an, Dir weiterhin zu antworten.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
goose Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: Sa 14.04.07 16:12 
Hallo,

eine Antwort die mit

"Das ist doch klar ( gemeint war sicher du blödie ) .."

beginnt regt aber auch nicht wirklich dazu an hier weiterhin Fragen zu stellen.

Du wirst es nicht glauben aber es gibt durchaus Menschen
die, im Gegensatz zu Dir, noch einige Wissenslücken haben und vielleicht
auch mit C# erst angefangen haben.

Matthias
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 14.04.07 18:26 
Lassen wir das, anscheinend haben wir gegenseitig unsere Antworten in den falschen Hals bekommen. Ich wollte keinesfalls sagen, Du seihst blöde. Sollte das so rübergekommen sein, entschuldige ich mich.

Nun zu Deinem Problem. Falls die Klasse später in einer eigenen Assembly steckt, könntest Du die Sichtbarkeit des Konstruktors von GSEArchive.GSE auf "assembly" setzen.

Wenn die Klasse nicht in einer separaten Assembly sein wird, fällt mir im Moment nur so etwas (einige Teile rausgekürzt):
ausblenden volle Höhe 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:
28:
29:
30:
31:
32:
33:
34:
35:
    public class GSEArchiv
    {
        private static GSE newGSE;

        public class GSE
        {
            private string m_Name = String.Empty;
            public String Name
            {
                get { return m_Name; }
                set { m_Name = value; }
            }

            public static void addNewGSE (string Name, GSEArchiv gsea)
            {
                gsea.AddGSE(new GSE(Name));   
            }

            private GSE(string Name)
            {
                this.m_Name = Name;
            }
        };

        private List<GSE> m_GSEList = new List<GSE>();
        private void AddGSE(GSE gse)
        {
            m_GSEList.Add(gse);
        }

        public void AddGSE(string GSEName)
        {
            GSE.addNewGSE(GSEName, this);
        }
    };

Schön ist's nicht, aber es funktioniert ;-)

Man kann aber natürlich immer noch an eine Instanz von GSEArchive.GSE kommen, indem eine GSE-Instanz der Liste hinzufügt und dann über den Indexer rausholt.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 15.04.07 00:41 
Wenn du die Verschachtelung genau umkehrst, kannst du den Kontruktor-Modifier von GSE auf private setzen.