(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.
- 1. invalidateOptionsMenu doesnt von Fragmente gecallt
- 2. Wie struct Datenelemente außerhalb von struct
- 3. Wie man IDisposable richtig implementiert
- 4. Android Symbolleiste versteckte Gegenstände
- 5. Does Openshift erlaubt yum auf skalierbare Anwendungen
- 6. IDisposable-Kette
- 7. Wie erstellt man eine Struktur auf dem Stapel in C?
- 8. Geklonte Gegenstände im Eulenkarussell
- 9. Implementieren IDisposable auf einer versiegelten Klasse
- 10. Does Registerstartup Erhöhung Seitengröße
- 11. Skipping Gegenstände bei Datenbindung
- 12. Zeiger auf Zeiger auf Struct
- 13. C++ Zuordnung auf dem Stapel neugierig
- 14. Does mit IF LET wirken wie Schließung
- 15. Wie gruppiere ich Gegenstände (Lebensmittelgruppen) in Swift?
- 16. Wie viele Gegenstände wurden pro start_url geschabt
- 17. Wie zentriert man Gegenstände im Isotopenbehälter?
- 18. Zwei Gegenstände Arrays und concat
- 19. ASP.NET MVC und Idisposable
- 20. WCF IDisposable Design Diskrepanz
- 21. IDisposable Metapher in Java?
- 22. XmlReader und IDisposable
- 23. SqlConnection SqlCommand SqlDataReader IDisposable
- 24. Schnittstellenvererbung mit IDisposable?
- 25. Angular2, Does EventEmitter erfordern zone.run?
- 26. Mit invariant für IDisposable
- 27. Speicherortmuster auf Stapel und Heap
- 28. ClientBase implementiert IDisposable Mitglied
- 29. EntLib IDisposable Konvertierung
- 30. Unausgeglichener Stapel!
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