Laden...

allgemeine Verständnisfrage zum Buch von Andreas Kühnel

Erstellt von lehmaennche vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.085 Views
L
lehmaennche Themenstarter:in
4 Beiträge seit 2007
vor 16 Jahren
allgemeine Verständnisfrage zum Buch von Andreas Kühnel

Hallo Leute,

ich bin neu hier und auch in Sachen C# Programmierung noch ziemlich grün hinter den Ohren. Ich arbeite mich gerade mit Hilfe eines Buches vom o.a. Author (Visual c# 2005, galileo openbook) in die Sprache C# ein.
Jetzt bin ich b ei Kap.5 über etwas gestolpert, was ich nicht verstehe. Vielleicht finde ich hier eine Antwort.

In Kap. 5.1.1 "Realisierung eines Objektzählers" spricht der Author davon eine Klassenvariable anstatt einer Instanzvariablen als Zähler zu verwenden. Das leuchtet soweit ein, damit nicht für jedes Objekt unnötig Speicher alloliert wird, usw.. bla bla...


public class Circle {
  // ---------- statische Felder --------------

 private static int countCircles; // hier
  
// ---------- Klasseneigenschaften ----------
  public static int CountCircles {
    get {return countCircles;}
  }
  ...
}

Ok. Soweit, so gut. Weiter unten geht es darum den Zähler zuverlässig wieder zu reduzieren. Hierfür werden diverse Methoden und Schnittstellen verwendet. Verstehe ich auch.
Jetzt kommt´s...
Warum wird die Bool´sche Variable CounterReduced nicht auch als Klassenvariable definiert? Als Klassenvariable müsste sie doch das Schlüsselwort static angegeben haben.


class Circle : IDisposable {
  // boolesche Variable, die Destruktor und Dispose steuert
  private bool counterReduced = false; // hier
  ...
  // Destruktor
  ~Circle() {
    if( ! counterReduced)
      countCircles--;
  }
  // Dispose aus der IDisposable-Schnittstelle
  public void Dispose() {
    if( ! counterReduced) {
      countCircles--;
      counterReduced = true;
    }
  }
}

Wenn mir das vielleicht jemand in kurzen Worten erklären kann, wäre ich sehr dankbar.

Danke schon mal!
cl

T
153 Beiträge seit 2007
vor 16 Jahren
naja....

Hey,

hab das eben mal kurz durchgesehen. Wenn du diese Variable als Klassenvariable anlegst, wer setzt die dann wieder auf false?! Sprich, es mus ja jedes Objekt seperat überprüft werden ob es bereits vernichtet wurde, würdest Du es statisch machen dann wären laut boolscher Variable alle Vernichtet sobald mal ein Objekt zerstört wurde. Diese Variable bezieht sich ja NUR AUF DAS AKTUELLE OBJEKT welches überprüft werden soll ob es bereits zerstört worden ist. Nicht alles macht statisch auch Sinn.

Ich hoffe ich konnte Dir soweit ein wenig helfen.

mfg
toxick

L
lehmaennche Themenstarter:in
4 Beiträge seit 2007
vor 16 Jahren
hmmm....stimmt!

Jo, das klingt logisch. So hab´ ich das noch garnicht gesehen.
Vielen Dank, dass du meinen grauen Zellen auf die Sprünge geholfen hast. 😁

gruß
cl

S
1.047 Beiträge seit 2005
vor 16 Jahren

Das leuchtet soweit ein, damit nicht für jedes Objekt unnötig Speicher alloliert wird

das ist aber nicht der grund warum ein klassenattribut benutzt wird...

du benutzt statische sachen wenn du "dinge" brauchst die nicht objektgebunden sind
da du hier zählen möchtest wieviel objekte existieren, geht das nur über ein statisches attribut