Entwickler-Ecke

C# - Die Sprache - Destructor


deusr - Fr 13.04.07 13:46
Titel: Destructor
Hallo Leute,

zunächst mal der Quelltext:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
    public class Bla
    {
        private static int _counter = 0;

        public virtual int counter
        {
            get { return _counter; }
        }
        
        public Bla()
        {
            _counter++;
        }

        ~Bla()
        {
            _counter--;
        }

    }


Ziel dieser ganzen Aktion ist, dass ich gerne die Anzahl der Instanzen wissen möchte, die aktuell aktiv sind. Wenn eine neue Instanz erstellt wird, wird der Counter richtigerweise erhöht, aber mit dem Löschen funktioniert das leider noch nicht wirklich. Kann mir jemand sagen, wieso?


Christian S. - Fr 13.04.07 17:32

Was genau klappt denn nicht?


r2c2 - Fr 13.04.07 17:34
Titel: Re: Destructor
user profile icondeusr hat folgendes geschrieben:
Wenn eine neue Instanz erstellt wird, wird der Counter richtigerweise erhöht, aber mit dem Löschen funktioniert das leider noch nicht wirklich. Kann mir jemand sagen, wieso?

AFAIK ganz einfach, weil das kein Destruktor ist. Das is n Finalizer und bei sowas kann man eben nicht genau bestimmen, wann der aufgerufen wird. Du zählst im Speicher vorhandene Instanzen, keine Referenzen ==> IDisposable wär IMHO ne Möglichkeit...



mfg

Christian


deusr - Fr 13.04.07 17:47

user profile iconChristian S. hat folgendes geschrieben:
Was genau klappt denn nicht?


_counter--; wird nicht sofort ausgeführt, sondern irgendwann, wenn es mal Lust und Zeit hat.


Christian S. - Fr 13.04.07 18:04

user profile icondeusr hat folgendes geschrieben:
user profile iconChristian S. hat folgendes geschrieben:
Was genau klappt denn nicht?


_counter--; wird nicht sofort ausgeführt, sondern irgendwann, wenn es mal Lust und Zeit hat.
Japp, das ist richtig so. Siehe das Posting R2C2. Es ist halt nicht genau bekannt, wann ein Desktruktor aufgerufen wird. R2C2 hat auch den Tipp gegeben, wie es gehen kann.


deusr - Fr 13.04.07 18:06

user profile iconChristian S. hat folgendes geschrieben:
Japp, das ist richtig so. Siehe das Posting R2C2. Es ist halt nicht genau bekannt, wann ein Desktruktor aufgerufen wird. R2C2 hat auch den Tipp gegeben, wie es gehen kann.


Jaja, ich habs schon verstanden :) Ich werde es mal mit dem Tipp von r2c2 versuchen. Ich wollte nur mal eben auf deine Frage antworten.