Entwickler-Ecke

Basistechnologien - Problem mit Deklarationen von Feldern / Eigenschaften


chriscolm - Fr 16.01.09 16:40
Titel: Problem mit Deklarationen von Feldern / Eigenschaften
Hallo,

da ich ein wenig mit dem XMLSerializer herumspielen wollte, wollte ich ein privates Feld von der Hauptform öffentlich machen:

Code im Hauptformular:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
namespace Band_Daten
{
    public partial class Form1 : Form

    {
        private TKasse kasse;
        private KBuch aktEintrag;

        public TKasse Kasse { get { return kasse; } set { kasse = value; } }
        
//.....
    }
}

Folgende Klasse wollte ich verarbeiten

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
namespace Kassenbuch
{
    class TKasse
    {
        public List<KBuch> KListe { get; set; }


        public TKasse()
        {
        KListe = new List<KBuch>();
        }


//.....
    }
}

Und ich bekomme diese Fehlermeldung, deren Bedeutung ich nicht wirklich interpretieren kann:

Fehler 1 Inkonsistenter Zugriff: Eigenschaftentyp "Kassenbuch.TKasse" ist weniger zugreifbar als Eigenschaft "Band_Daten.Form1.Kasse" D:\CSharp\Testprojekte\Band\Band-Daten\Band-Daten\Form1.cs 20 23 Band-Daten

Woran kliegt es? Wie kann man das umgehen?

Grüße und danke

Christian

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


Kha - Fr 16.01.09 17:13
Titel: Re: Problem mit Deklarationen von Feldern / Eigenschaften
user profile iconchriscolm hat folgendes geschrieben Zum zitierten Posting springen:
da ich ein wenig mit dem XMLSerializer herumspielen wollte, wollte ich ein privates Feld von der Hauptform öffentlich machen:
Der XML-Serializer serialisiert zwar nur öffentliche Member, aber da du ja nicht die Form serialisieren willst, sondern nur dein TKasse-Objekt (unter .Net bitte den T-Klassenpräfix weglassen), brauchst du dafür keine Eigenschaft.

user profile iconchriscolm hat folgendes geschrieben Zum zitierten Posting springen:
Woran kliegt es?
Die Klasse ist internal (der Standard-Modifier), deine Eigenschaft und deine Form-Klasse aber public. Die Eigenschaft kann also höchstens auch internal sein oder du deklarierst TKasse als public. Wie gesagt brauchst du aber überhaupt keine TKasse-Eigenschaft.


chriscolm - Fr 16.01.09 19:56

Moin,

vielen Dank!
Ich habe die Klasse als public deklariert (ich habe bisher in Delphi programmiert, da scheint das etwas einfacher zu sein). Dieser XML Serializer ist ja völlig genial, nimmt einem die ganze Arbeit ab...Mal schauen, ob das öffnen auch so leicht geht.

Wie werden denn Klassen üblicherweise bezeichnet? In Delphi stellt man ja immer ein "T" voran.

Grüße

Christian


Kha - Sa 17.01.09 13:05

user profile iconchriscolm hat folgendes geschrieben Zum zitierten Posting springen:
Wie werden denn Klassen üblicherweise bezeichnet?
Mit XmlSerializerund Form hast du doch schonmal zwei Beispiele ;) .


chriscolm - So 18.01.09 16:29

Ja, sicher, ich habe bisher in Delphi programmiert. Da ist es üblich, die Klasse bsp TAuto zu nennen. Die Variable, die instanziert wird heißt dann

Delphi-Quelltext
1:
Auto := TAuto.create                    


Allgemein ist es da so, dass man einer Typdeklaration ein "T" voranstellt. Fleder bekommen ein "F" und so. Das scheint in C# und .NET ja offenbar anders üblich zu sein. Wie benennt man üblicherweise Klassen, um die von den instanzierten Objekten auseinander halten zu können? Ich fände es etwas unglücklich zu schreiben

C#-Quelltext
1:
auto = new auto()                    

Wäre mir zu verwirrend.

So etwas wie einen Styleguide habe ich bisher nicht gefunden.

Grüße

Christian

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


Christian S. - So 18.01.09 16:36

Hallo!

In C# macht man sich erst einmal zu nutze, dass die Sprache case-sensitiv ist und zum anderen, der Compiler ein bisschen "intelligenter" ist.

Man sieht es oft so (und ich mache es auch so), dass man
(a) Klassen groß und ohne Präfix schreibt: Auto (Interfaces bekommen ein "I" als Präfix)
(b) Fleder klein schreibt: Auto auto;
(c) Eigenschaften groß schreibt: Auto Auto { get {return auto;} set {auto = value;}}

Das sieht hier erst einmal komisch aus. Im Alltagsgebrauch hat es mich bisher aber nicht gestört und IMHO weist eine gleiche Benennung von Klasse und Instanz auch auf einen Fehler in der Benenneung hin. "Auto" ist z.B. ein allgemeiner Begriff und daher gut für eine Klasse geeignet, weniger gut für eine konkrete Instanz.

Grüße
Christian

P.S.: Es gibt auch Leute, die bei Feldern z.B. ein "_" voranstellen, um die im IntelliSense an einem Fleck zu haben.

Grüße
Christian


JüTho - So 18.01.09 18:31

user profile iconchriscolm hat folgendes geschrieben Zum zitierten Posting springen:
So etwas wie einen Styleguide habe ich bisher nicht gefunden.

Den gibt es unter Richtlinien für Namen [http://msdn.microsoft.com/de-de/library/ms229002(VS.80).aspx].

Gruß Jürgen