Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Thema Kapselung, Verständnisproblem bei den Eigenschaften

Empfohlene Antworten

Veröffentlicht

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

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.

Danke, für die Seite :D

Könntest du mir mal das mit dem Clone erklären ? Verstehe das nicht so =D

Mfg

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

    }

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.