Ich studiere das Dispose-Muster in C# und verstehe, dass die Dispose-Methode verwendet wird, wenn nicht verwaltete Ressourcen vorhanden sind. Wenn ich beispielsweise eine nicht verwaltete Ressource in FirstClass habe und FirstClass in einer Node-Klasse enthalten ist, muss ich die Dispose-Methode für beide implementieren, oder?
Was ich nicht verstehe Das Wichtigste ist, ob ich GC.SuppressFinalize(this) aufrufen muss. in jeder Dispose-Methode.
GC.SuppressFinalize(this); weist den Garbage Collector an, nicht zu finalisieren, aber bedeutet dies, dass GC.SuppressFinalize(this); ist in der Dispose-Methode nur erforderlich, wenn die Klasse über einen Finalizer verfügt? Wenn das der Fall ist, wäre es meiner Meinung nach sowohl in der Node-Klasse als auch in der BaseClass erforderlich. Da die Node-Klasse jedoch auch verwaltete Mitglieder hat, ist es in diesem Fall akzeptabel, den Finalizer zu unterdrücken?
Ich bin verwirrt, weil es verschachtelte Klassen mit Dispose-Methoden gibt. public class Node : IDisposable
{
public Node Next { get; set; } = null;
public Node Child { get; set; } = null;
public FirstClass CppInstance { get; set; } = null;
public Node()
{
CppInstance = new FirstClass();
}
~Node()
{
this.Dispose();
}
public void Dispose()
{
this.CppInstance?.Dispose();
}
}
public class FirstClass : BaseClass
{
private List _nameList = [];
public FirstClass()
{
CreateCppData( out _instance );// C++ Function create
_nameList.Add("A");
_nameList.Add("B");
_nameList.Add("C");
}
public void Dispose()
{
this.Dispose( disposing: true );
GC.SuppressFinalize( this );
}
public virtual void Run()
{
}
}
C# Ich habe es basierend auf dem Rat neu geschrieben.
public class Node : IDisposable
{
public Node Next { get; set; } = null;
public Node Child { get; set; } = null;
Ich studiere das Dispose-Muster in C# und verstehe, dass die Dispose-Methode verwendet wird, wenn nicht verwaltete Ressourcen vorhanden sind. Wenn ich beispielsweise eine nicht verwaltete Ressource in FirstClass habe und FirstClass in einer Node-Klasse enthalten ist, muss ich die Dispose-Methode für beide implementieren, oder? Was ich nicht verstehe Das Wichtigste ist, ob ich GC.SuppressFinalize(this) aufrufen muss. in jeder Dispose-Methode. GC.SuppressFinalize(this); weist den Garbage Collector an, nicht zu finalisieren, aber bedeutet dies, dass GC.SuppressFinalize(this); ist in der Dispose-Methode nur erforderlich, wenn die Klasse über einen Finalizer verfügt? Wenn das der Fall ist, wäre es meiner Meinung nach sowohl in der Node-Klasse als auch in der BaseClass erforderlich. Da die Node-Klasse jedoch auch verwaltete Mitglieder hat, ist es in diesem Fall akzeptabel, den Finalizer zu unterdrücken? Ich bin verwirrt, weil es verschachtelte Klassen mit Dispose-Methoden gibt. public class Node : IDisposable { public Node Next { get; set; } = null; public Node Child { get; set; } = null;
public FirstClass CppInstance { get; set; } = null;
public Node() { CppInstance = new FirstClass(); }
~Node() { this.Dispose(); }
public void Dispose() { this.CppInstance?.Dispose(); } }
public class FirstClass : BaseClass { private List _nameList = [];
public FirstClass() { CreateCppData( out _instance );// C++ Function create _nameList.Add("A"); _nameList.Add("B"); _nameList.Add("C"); }
public void Dispose() { this.Dispose( disposing: true ); GC.SuppressFinalize( this ); }
public virtual void Run() { } }
C# Ich habe es basierend auf dem Rat neu geschrieben. public class Node : IDisposable { public Node Next { get; set; } = null; public Node Child { get; set; } = null;
Ich habe eine einfache Klasse wie diese, die idisposable implementiert, und so wird sie von einem CA1816 getroffen: Rufen Sie GC.SuppressFinalize korrekt: > public class A : IDisposable
{
// ...
int...
Ich habe viele Dinge der folgenden Art: a+2da + 2d
Der erste Teil Der Inhalt des Spans ist Teil eines mathematischen Ausdrucks a+2d (ohne Leerzeichen) und der zweite Teil enthält denselben Text,...
Ich bin neu bei Uno, seinem MVUX-Muster (Model, View, Update, eXtended) und dem von Fluxor implementierten Flux-Muster.
Ich habe zwei grundlegende Fragen: