(wenn nicht „Verwendung“ verwendet wird) Abgesehen ob es sich um eine schreckliche schreckliche Idee ist IDisposable
auf einem Nicht-Referenztyp je zu implementieren, würde die Dispose()
Methode aufgerufen werden, wenn ein Nicht-Referenz IDisposable
wird vom Stapel entfernt?Does IDisposable auf Stapel Gegenstände wie struct gecallt
Antwort
Die Antwort lautet: nein,
Lediglich eine Struktur zu schaffen, die auf dem Stapel lebt, wird nicht dazu führen, Dispose()
aufgerufen werden, wenn es den Gültigkeitsbereich verlässt. (Natürlich, noch wird, die für eine Klasse passieren.)
Dispose()
wird nur dann aufgerufen werden, wenn sie ausdrücklich genannt wird, oder wenn es implizit durch ein using
genannt wird.
jedoch Dispose()
wird aufgerufen werden, wenn eine Struktur IDisposable
implementiert und ist im Inneren ein benutztes verwendet, etwa so:
using System;
namespace Demo
{
struct Test: IDisposable
{
public void Dispose()
{
Console.WriteLine("Help! Help! I'm being oppressed!");
}
}
static class Program
{
static void Main()
{
using (var test = new Test())
{
Console.WriteLine("Using a Test object");
}
}
}
}
Diese gibt
Using a Test object
Help! Help! I'm being oppressed!
Beachten Sie, dass structs im Allgemeinen dazu bestimmt sind, Leichtgewichtig sein und sollte keine Referenzen enthalten (außer vielleicht für Strings). In diesem Fall sollte ein Struct nichts Wegwerfbares enthalten, daher würde diese Frage nicht auftreten.
Nein ich meine IDisposable.Dispose –
Warum in aller Welt möchten Sie IDisposable struct? – dotctor
Kanonischer Link: https://ericlippert.com/2011/03/14/to-box-o-not-to-box/ – stuartd