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?