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
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
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
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