Zum Inhalt springen

Thema Kapselung, Verständnisproblem bei den Eigenschaften


Empfohlene Beiträge

Geschrieben

Hallo,

ich habe gestern Erfahren, dass man seine Felder (Variabeln in Klassen, bzw Eigenschaften). Am besten private deklariert. Also natürlich nicht alle sonder, z.B. Variabeln die wenn sie geändert werden, auch eine andere Variabel synchron mitlaufen muss.

Z.B. hat man ein Programm was den Preis des Brotes berechnet und wenn sie die Anzahl der Brote ändert muss sich damit auch mit der Preis ändern =D

Nun hat C# ja die tollen Eigenschafte, auch Akzessoren genannt, get & set.

Code


private int anzahlBrote;

private int brotePreis;

public const int brotKosten;


public int AnzahlBrote

{

 get {

  return anzahlBrote;

 }


 set {

  anzahlBrote = AnzahlBrote;

  brotPreis = anzahlBrote * broteKosten;

 }

}

Wie ich nun das Verstanden habe ist das so, dass die Eigenschaften eine spezielle Methode sind, sprich wenn im Programm eine Instanz meiner Klasse Namens broteRechnung existiert :

brotRechnung.AnzahlBrote = 10;

wird der set-er aufgerufen und führt die 2 Anweisungen durch. Richtig ?

Also die Akzessoren sind nur Methoden, die eine oder mehrere Anweisungen durchführen.

Nun habe ich aber einen Programmcode gesehen, da stand nur eine Eigenschaft, aber keine Deklaration eines pirvaten Feldes.

public int AnzahlBrote {get; private set;}

naja, dass private set; sagt dass diese Eigenschaft nur in der Klasse selbst gesetzt werden darf. Aber es ist doch nur die spezielle Methode. Ich meine es wird nirgends in der Klasse gesagt

private int anzahlBrote;

Dann müsste da doch keine Variabel sein ? Aber es werden Werte gespeichert in diese Methode und sie wird wie eine Variabel im Programm gehandelt :confused:

Kann da jemand Licht ins Dunkel bringen ? :D

Ausserdem habe ich gelesen, dass wenn man Felder oder Methoden als private deklariert, sie nun innerhalb des Objektes eingesetzt werden können, das ist verständlich. Instanzen anderer Klassen, können nichts sehen, aber Instanzen, der selben Klasse können die Felder und Methoden sehen :confused:

Heißt das wenn ich eine Klasse "goodMorningVietnam" habe und 2 Instanzen, das die eine sagen kann instanz2.instanz1.privatesFeld ?

Mfg

Geschrieben

Nun habe ich aber einen Programmcode gesehen, da stand nur eine Eigenschaft, aber keine Deklaration eines pirvaten Feldes.

public int AnzahlBrote {get; private set;}

naja, dass private set; sagt dass diese Eigenschaft nur in der Klasse selbst gesetzt werden darf. Aber es ist doch nur die spezielle Methode. Ich meine es wird nirgends in der Klasse gesagt

private int anzahlBrote;

Dann müsste da doch keine Variabel sein ? Aber es werden Werte gespeichert in diese Methode und sie wird wie eine Variabel im Programm gehandelt :confused:

Kann da jemand Licht ins Dunkel bringen ? :D

Das ist ein C# 3.0 Feature.

Ausserdem habe ich gelesen, dass wenn man Felder oder Methoden als private deklariert, sie nun innerhalb des Objektes eingesetzt werden können, das ist verständlich. Instanzen anderer Klassen, können nichts sehen, aber Instanzen, der selben Klasse können die Felder und Methoden sehen :confused:

Heißt das wenn ich eine Klasse "goodMorningVietnam" habe und 2 Instanzen, das die eine sagen kann instanz2.instanz1.privatesFeld ?

Ja, lohnt sich z.B. bei sowas wie Clone.

Geschrieben

Na sowas z.B.:


    public class FooBar : ICloneable

    {

        public int Count { get; private set; }


        #region ICloneable Members


        public object Clone()

        {

            FooBar fooBar = new FooBar();

            fooBar.Count = this.Count;

            return fooBar;

        }


        #endregion

    }

Geschrieben
Na sowas z.B.:


    public class FooBar : ICloneable

    {

        public int Count { get; private set; }


        #region ICloneable Members


        public object Clone()

        {

            FooBar fooBar = new FooBar();

            fooBar.Count = this.Count;

            return fooBar;

        }


        #endregion

    }

Danke, soweit bin ich leider noch nicht :D Aber kommt alles noch. Mfg :bimei

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...