使用语句的C#/ VB.NET是否实际上对未实现IDisposable的类执行任何操作

rag*_*age 1 .net c# vb.net

如果我有以下内容:

public class Myclass{

//some resources

}
Run Code Online (Sandbox Code Playgroud)

然后在另一个班级我做以下事情:

using(Myclass myclass = new Myclass()) {
// do things with myclass instance

}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,using语句实际上是否提供了任何用途?Myclass没有实现IDisposable接口,所以没有任何Dispose()方法可以调用.我正确地考虑了这个吗?

Hab*_*bib 5

如果您的类没有实现,IDisposable那么您不能在using语句中使用它.这将是一个编译时错误.

除此之外,using语句转换为try-finally块并在using语句结束时Dispose被调用(即使在例外的情况下).CLR没有做任何神奇的实际处理对象,这一切都取决于实现Dispose.您可以使用Dispose方法的空实现,但不会产生任何影响.