我正在编写一个C#程序,我有一个继承多个接口的类,如下面的
IMyInterfacce myInterface = new MyClass();
但是,因此IMyInterface或IExampleInterface都不会单独继承IDisposable。但是当我创建一个接口实例时,例如
{{1}}
并分析我的代码(使用Coverity工具)我发现资源泄漏并且对象myInterface没有释放它在内存中保存的资源。 虽然我正在使用新的MyClass()实例化MyClass实例,但是因为IMyInterface虽然没有MyClass,但它没有实现IDisposable。
那么为什么在地球上,就“myInterface”对象而言,我会抱怨资源泄漏/内存泄漏。
非常欢迎任何建议。
答案 0 :(得分:6)
创建类并将其分配给接口时,您仍然创建了类类型的实例。
IMyInterfacce myInterface = new MyClass();
仍然创建一个MyClass
对象,myInterface引用一个MyClass
对象。因此myInterface
仍引用需要处理的类的实例。
完成后,您必须将其强制转换并在其上调用Dispose
:
((IDisposable)myInterface).Dispose();
// Or
((MyClass)myInterface).Dispose();
或者您可以将其包装在using语句中:
using (MyClass myClass = new MyClass()) {
MyInterface myInterface = myClass;
}