如何检测对象是否在“使用”范围内?

时间:2010-08-31 21:15:07

标签: c# .net

请参阅我的示例代码:

var testObject = new SomeClass();
using (testObject)
{
     //At this point how can the testObject implicitly know 
     //if it is placed inside a 'using' scope?

     // In other words, how can testObject know that
     // .SomeAction() is being called from within a 'using' scope?

     testObject.someAction();
}

3 个答案:

答案 0 :(得分:5)

它不能。

它可以获得堆栈转储以确定调用代码的位置,并分析代码以尝试确定它的作用。它可以查找try...finaly块生成的disposeusing,但它仍然无法判断它是否真的是using块。

答案 1 :(得分:0)

你做不到。无论如何它都没有任何区别。你所做的只是创建对象,调用一些方法,然后处理它。为什么someAction的行为会根据Dispose是否在将来某个时间被调用而发生变化?

答案 2 :(得分:0)

  

我想构建一个对象   只能将它的方法称为if   它位于“使用”范围内。

不,那是不可能的。

想要这样的功能的唯一原因是保证一个对象在离开范围时总是被处理掉,并且有更好的方法来强制执行这个逻辑。

如果您使用的是VS2010,则可以将FxCop的Dispose objects before losing scope用于实现IDisposable的对象。如果你创建一个没有处理它的对象,FxCop将使你的构建失败 - 这就像你可以满足你的要求一样好。[/ p>