C#にはusing
、特にIDisposableオブジェクト用のステートメントがあります。おそらく、using
ステートメントで指定されたオブジェクトは、決定論的に解放されるべきある種のリソースを保持します。
ただし、プログラミングには、開始と終了が明確であるが、固有の言語サポートがない設計が多数あるように思われます。このusing
構成は、コードエディターの組み込み機能を使用して、少なくともそのような設計または操作の範囲を明確かつ自然に強調する機会を提供します。
私が念頭に置いているのは、「開始」と「結合」を伴う非同期コード実行など、さまざまな種類がありますが、頻繁にBeginXXX()
andメソッドで開始する種類の操作です。EndXXX()
この素朴な例を見てください。
webDataOperation.Start();
GetContentFromHardDrive();
webDataOperation.Join();
// Perform operation that requires data from both sources
代わりに、StartメソッドIDisposable.Dispose
が結合操作を実行するメソッドを持つオブジェクトを返した場合はどうなりますか。
using(webDataOperation.Start()) {
GetContentFromHardDrive();
}
// Perform operation that requires data from both sources
または、さらに良いことに、私が特に念頭に置いていたのは、高度に特殊化されたグラフィックブリッティングを実行し、Begin()
andEnd()
メソッド(DirectXおよびXNAにも存在するデザイン)を持つオブジェクトがあります。その代わり...
using(blitter.BlitOperation()) {
// Do work
}
// Use result
より自然で読みやすいように見えますが、意図しない目的でIDisposable
インターフェイスとステートメントを使用しているため、お勧めできませんか?using
言い換えれば、これは直感的でない方法でオペレーターをオーバーロードすることと同等でしょうか?