【发布时间】:2010-11-08 21:19:02
【问题描述】:
C# 有 using 语句,专门用于 IDisposable 对象。据推测,using 语句中指定的任何对象都将持有某种应该被确定性释放的资源。
然而,在我看来,编程中有许多设计都有一个单一的、明确的开始和结束,但缺乏内在的语言支持。 using 构造提供了使用代码编辑器的内置功能的机会,至少可以清晰自然地突出此类设计或操作的范围。
我想到的是那种经常以 BeginXXX() 和 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() 和 End() 方法(DirectX 和 XNA 中也存在这种设计)。而是……
using(blitter.BlitOperation()) {
// Do work
}
// Use result
它似乎更自然、更易读,但它是否不可取,因为它使用IDisposable 接口和using 语句用于非预期目的?换句话说,这是否等同于以非直观方式加载运算符?
【问题讨论】:
-
为什么不直接用 { 开头, } 结尾?这提供了范围而不会滥用 using。
标签: c# using-statement