在C#中使用语句而不实现Dispose方法

时间:2013-12-05 05:53:42

标签: c# .net c#-4.0 using

我试图理解在C#中使用块。我可以在Using语句中创建一个自定义对象,如下所示,它不实现IDisposable接口吗?

Class A
{
}

using(A a = new A())
{
}

它给我一个错误,说“错误1'ConsoleApplication1.A':在using语句中使用的类型必须可以隐式转换为'System.IDisposable'”

如何更正此错误?我不想做A级:IDisposable

还有其他方式吗?或者强制要求我们需要在这些使用块内部使用的自定义对象中实现IDisposable Dispose方法?

编辑:我不期望MSDN和数千个网站中的定义。我只是想了解这个错误以及整改

2 个答案:

答案 0 :(得分:9)

使用块是语法糖,仅适用于IDisposable对象。

以下使用声明:

using (A a = new A()) {
// do stuff
}

是语法糖:

A a = null;

try {
  a = new A();
  // do stuff
} 
finally {
  if (!Object.ReferenceEquals(null, a))  
    a.Dispose();
}

答案 1 :(得分:3)

使用的全部意义是通过最终调用Dispose来创建try块的等效项。如果没有Dispose方法,则没有指向using语句。