Heim > Backend-Entwicklung > C++ > Ist die Verwendung von „using' und „IDisposable' für die Statusverwaltung in C# ein Missbrauch?

Ist die Verwendung von „using' und „IDisposable' für die Statusverwaltung in C# ein Missbrauch?

Patricia Arquette
Freigeben: 2024-12-30 19:56:10
Original
717 Leute haben es durchsucht

Is Using `using` and `IDisposable` for State Management in C# an Abuse?

Verwendung von IDisposable für die Zustandsverwaltung

In C besteht ein häufiges Muster darin, den Konstruktor und Destruktor der Klasse A zu verwenden, um Ein- und Austrittsbedingungen zu verarbeiten für Klasse B, Sicherstellung eines bekannten Zustands beim Verlassen des Geltungsbereichs. Dies ist kein reines RAII, sondern eine etablierte Praxis.

In C# kann ein ähnlicher Ansatz mit using und IDisposable verwendet werden. Diese Verwendung wirft jedoch eine Frage auf:

Frage: Ist es missbräuchlich, using und IDisposable als Mittel zum Erhalten von „bereichsbezogenem Verhalten“ für die Ausnahmesicherheit zu verwenden?

Antwort:

Einige Meinungen halten diese Verwendung von using und IDisposable für einen Missbrauch. Hier sind die Gründe:

  • Irreführende Absicht: Die Verwendung wird typischerweise dazu verwendet, Ressourcen zu verwalten und sie zu entsorgen, wenn sie nicht mehr benötigt werden. Das Ändern des Programmstatus ist keine Ressourcenverwaltung, daher führt die Verwendung von „using“ für diesen Zweck den Leser in die Irre.
  • Unerwartete Notwendigkeit: „using“ sollte aus Bequemlichkeitsgründen und nicht aus Notwendigkeit verwendet werden. In diesem Fall erweckt die Verwendung von using den Anschein, als würde ein einfacher Höflichkeitsmechanismus verwendet, um den Programmstatus zu ändern.
  • Versteckte semantische Auswirkung: Die Codeanalyse wird zu einer Herausforderung, wenn using für die Statusverwaltung verwendet wird , wodurch die wahre semantische Auswirkung des Schließens des using-Blocks verschleiert wird.

Bedenken Sie beispielsweise Folgendes Code:

{
    // Unlock the frobble
    this.Frobble.Unlock();

    try
    {
        // May throw
        Foo();
        this.Frobble.Fiddle();
        Bar();
    }
    finally
    {
        // Lock the frobble
        this.Frobble.Lock();
    }
}
Nach dem Login kopieren

Dieser Code ist anfällig für das Problem, dass eine Ausnahme, die nach dem Entsperren, aber vor dem Eintritt in den Try-Block ausgelöst wird, das Frobbble entsperrt lässt. Die Verwendung von using zur Bewältigung dieser Statusänderung würde die Erkennung dieser Schwachstelle erschweren.

Daher wird generell empfohlen, using für den beabsichtigten Zweck der Ressourcenverwaltung zu verwenden und die Verwendung für die Statusverwaltung zu vermeiden.

Das obige ist der detaillierte Inhalt vonIst die Verwendung von „using' und „IDisposable' für die Statusverwaltung in C# ein Missbrauch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage