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
Christian S.: Code- durch C#-Tags ersetzt
Kha - Fr 16.01.09 17:13
Titel: Re: Problem mit Deklarationen von Feldern / Eigenschaften
chriscolm hat folgendes geschrieben : |
| 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.
chriscolm hat folgendes geschrieben : |
| 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
chriscolm hat folgendes geschrieben : |
| 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
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
Wäre mir zu verwirrend.
So etwas wie einen Styleguide habe ich bisher nicht gefunden.
Grüße
Christian
Moderiert von
Christian 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!