Schlechte Übung? Nicht-kanonische Verwendung der using-Anweisung von c #

C # hat dieusing Anweisung, speziell für IDisposable-Objekte. Vermutlich jedes Objekt in der angegebenenusing Die Anweisung enthält eine Art Ressource, die deterministisch freigegeben werden soll.

Es scheint mir jedoch, dass es in der Programmierung viele Entwürfe gibt, die einen eindeutigen Anfang und ein eindeutiges Ende haben, denen jedoch die eigentliche Sprachunterstützung fehlt. Dasusing construct bietet die Möglichkeit, die integrierten Funktionen eines Code-Editors zu nutzen, um den Umfang eines solchen Entwurfs oder einer solchen Operation zumindest klar und natürlich hervorzuheben.

Was ich im Sinn habe, ist die Art von Operation, die häufig mit einer. BeginntBeginXXX() undEndXXX() Methode, obwohl es viele verschiedene Varianten gibt, wie z. B. eine asynchrone Codeausführung, die einen "Start" und einen "Join" beinhaltet.

Nehmen Sie dieses naive Beispiel.

webDataOperation.Start();
GetContentFromHardDrive();
webDataOperation.Join();
// Perform operation that requires data from both sources

Was ist, wenn die Start-Methode stattdessen ein Objekt zurückgibt, dessenIDisposable.Dispose Methode führt die Verknüpfungsoperation aus.

using(webDataOperation.Start()) {
    GetContentFromHardDrive();
}
// Perform operation that requires data from both sources

Oder noch besser, was ich konkret im Sinn hatte: Ich habe ein Objekt, das hochspezialisiertes Grafik-Blitting ausführt und eine hatBegin() undEnd() Methode (ein Design, das auch in DirectX und XNA vorhanden ist). Stattdessen...

using(blitter.BlitOperation()) {
    // Do work
}
// Use result

Es scheint natürlicher und lesbarer zu sein, aber es ist nicht ratsam, da es das verwendetIDisposable Schnittstelle und dieusing Erklärung für unbeabsichtigte Zwecke? Mit anderen Worten, wäre dies auf Augenhöhe mit oLaden eines Bedieners auf nicht intuitive Weise?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage