C# 有using
语句,专门针对 IDisposable 对象。据推测,using
语句中指定的任何对象都将持有某种应该被确定性释放的资源。
然而,在我看来,编程中有许多设计都有一个单一的、明确的开始和结束,但缺乏内在的语言支持。该using
构造提供了使用代码编辑器的内置功能的机会,以至少清晰自然地突出此类设计或操作的范围。
我想到的是那种经常以BeginXXX()
andEndXXX()
方法开始的操作,尽管有很多不同的风格,例如涉及“开始”和“加入”的异步代码执行。
举这个天真的例子。
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
或者,更好的是,我特别想到的是:我有一个执行高度专业化的图形 blitting 的对象,并且有一个Begin()
andEnd()
方法(DirectX 和 XNA 中也存在这种设计)。反而...
using(blitter.BlitOperation()) {
// Do work
}
// Use result
它似乎更自然和可读,但它是否不可取,因为它使用IDisposable
接口和using
语句用于非预期目的?换句话说,这是否与以非直观方式重载运算符相提并论?