Autor Beitrag
chriscolm
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 16.01.09 16:40 
Hallo,

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

Code im Hauptformular:
ausblenden 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 16.01.09 17:13 
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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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
ausblenden 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
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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

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

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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.

Gruß Jürgen