In .NET gibt es eine einfache Möglichkeit für eine Klasse benachrichtigt werden, wie es außerhalb des Geltungsbereichs fällt?.NET Instant Out of Scope Benachrichtigung?
Antwort
Ja, mit einigen Sprachen. C++/CLI wird Dipose-Aufrufe für IDisposable-Implementierer ausgeben, wenn ihre Nicht-Heap-Zuordnungen außerhalb des Gültigkeitsbereichs liegen (was ihnen effektiv die gleiche Semantik gibt wie die Stapelzuweisung von Ressourcen in normalem C++). Außerdem wird die C++/CLI-Destruktorsyntax von ~ Classname zu einer Implementierung von Dispose (und bewirkt, dass die Klasse IDisposable implementiert).
Ich würde andere Sprachen mit traditioneller deterministischer Zerstörung erwarten, diese Politik mit der Zeit anzunehmen. Wie andere bereits erwähnt haben, können Sie es in C# mit "using" emulieren, aber es ist nicht ganz dasselbe.
Wenn IDisposable implementiert wird und Sie einen using-Block verwenden, sicher.
Nr
Wenn Sie andere Ressourcen als Arbeitsspeicher bereinigen, implementieren IDisposable und Ihre Objekte mit using
Blöcken erstellen. Wenn Sie Speicher aufräumen müssen, können Sie es wirklich dem Garbage Collector überlassen.
Nein, gibt es nicht.
Nein, in keiner .NET-Sprache gibt es eine deterministische Finalisierung. Der Garbage Collector ist verantwortlich für das Finalisieren von Objekten, die keine Wurzeln in der Anwendung haben.
Wenn es IDisposable implementiert, Ihre Methode Dispose() herausfinden würde:
using (var c = new YourClassImplementsIDisposable())
{
// Stuff happens
}
// c.Dispose has been called
sonst nicht, weil das Objekt nur, bis
GC 'hängen'Sie einen Finalizer verwenden könnte. Es würde einmal Müll colelcted genannt werden, aber nicht sofort nach Verlassen des Bereichs.
http://www.switchonthecode.com/tutorials/csharp-tutorial-object-finalizers
Er fragte jedoch nicht nach Finalisierung, er fragte nach Benachrichtigung. Da es in keiner .NET-Sprache verfügbar ist, können Sie, wenn Sie in C++/CLI (dem Nachfolger von Managed C++, das zuerst in VS2005 erschien) programmieren, eine Referenz auf ein Objekt deklarieren, als wäre es eine automatische Variable . Wenn die Klasse dieses Objekts IDisposable implementiert, wird es benachrichtigt, wenn es den Gültigkeitsbereich verlässt. Dies ist eine Eigenschaft, die leider in C# IMHO fehlt. – U62
btw. war ich nicht das, der abgelehnt wurde! – U62