Destructor

Navy

Freiwillige Serverwehr
Hallo,

ich bin gerade dabei von Delphi auf C# umzusteigen und hab neben einigen Syntaxprobleme noch ein unbändiges Verlangen auf einen Objekt-Destruktor. Ich weiß, C# *braucht* keinen, nirgendwo konnt ich aber eine Dokumentation lesen, daß es keinen gibt. Da ich zum Testen viele Objekte verschachtele und einen großen Speicherhunger habe, *will* ich Objete zerstören um Auswirkungen auf die Performance zu testen.

Gibt es einen oder bringt es bichts?

TIA

Navy
 
Jede klasse besitzt einen Standarddstruktor (wie natürlich auch einen Konstruktor). Dieser wird aufgerufen, wenn ein Objekt zerstört wird.

Du brauchst deshalb nur einen eigenen Destruktor, wenn du noch irgendwelchen Code ausführen willst, bevor ein Objekt zerstört wird.

den Destruktor definierst du so wie den Konstruktor, nur mit einem "~" vornedran.

zb:

Code:
class Klasse
{

    private Klasse()
    {
        //Konstruktor
    }

    ~Klasse()
    {
         //Destruktor
    }
}
 
Hallo.

Ein Konstruktor hilft dir bei .net nicht dir unnötig erscheinende Objekte loszuwerden. Das regelt alleine der Garbage Collector.

Es gibt zwar einen Konstruktor, allerdings ist der im normalfall nicht notwendig.

Er trägt den Namen der Klasse, und wird mit einer Tilde (~) eingeleitet.
Code:
public class Test
{
	// Konstruktor..
	public Text()
	{
		//..
	}

	// Destruktor..
	~Test
	{
		//..
	}
}

Sollte eines deiner Objekte das Interface IDisposeable implemetieren, solltest du einen Destruktor verwenden, und in diesem nur die Dispose-Methode aufrufen.

Solltest du noch nicht um diese Methode bescheid wissen, ne kurze Einführung.
Im Allgemeinen werden die Objekte von GC verwaltet, allerdings kann es sein, das ein Objekt Ressourcen belegt, welche nicht vom GC verwaltet werden. (Offene Streams zu Dateien z.b.)
Diese müssen selbst vom Objekt freigegeben werden. Durch implementierung des IDisposeable Interfaces muss die Dispose Methode angelegt werden, und diese soll sich eben ums freigeben der nicht verwalteten Ressourcen kümmern.
Wenn Dispose mehrfach aufgerufen wird, sollte nur der erste Aufruf eine Wirkung haben.

MfG,
Alex
 
Danke für die Hilfe.

Wie schon erwähnt bin ich in C(#) komplett neu, das Prinzip des GarbageCollectors kannte ich und wußte auch, daß es in C# effizient umgesetzt worden ist. Mir geht es einfach nur darum "sauberer" zu programmieren und hinter mir aufzuräumen. Mir fehlen auch einfache Hilfsmittel wie Zeiger und die damit verbundenen Möglichkeiten. Werde vielleicht dann doch auf C++ umsteigen (müssen), wenn es vielleicht ein Schritt zurück ist..

Navy
 
Warum brauchst du Zeiger wie aus C++..?
Wenn du sie wirklich mal brauchst, schau dir an was unsafe Code in C# ist.
Dort sind solche Zeiger erlaubt.
 
Weil, und das hört sich vielleicht lächerlich an, ich ncch aus meiner Zeit aus Pascal und Delphi an eigene Variablenstrukturen gewöhnt bin und mich noch nicht mit dem Syntax eigener "Records" auseinandergesetzt habe. Ich will zwar umlernen und umdenken aber nur langsam und gemächlich.

Navy
 
ääh jeder versucht jetzt auf managed Code zu portieren und möglichst kein Zeigerkrams mehr zu benutzen und du willst genau das Gegenteil machen?

Managed isses doch viel Anwenderfreundlicher wenn du dich nicht mit den ganzen Zeigern auseinandersetzen musst, ich versteh dich echt nicht.
 
Ich habe nicht gesagt, daß es sinnig ist, ich möchte halt erstmal meine alten Kentnisse auf C# portieren und mich dann langsam mit den Eigenschaften der Sprache befassen. Ich hatte "damals" (12Jahre her ) beim Ustieg von Basic auf Pascal ähnliche, wenn auch nicht so umfassende Probleme.


Navy
 
Zurück