带接口和内存泄漏的C#多重继承

时间:2015-08-20 20:12:16

标签: c# .net

我正在编写一个C#程序,我有一个继承多个接口的类,如下面的

  IMyInterfacce myInterface = new MyClass();

但是,因此IMyInterface或IExampleInterface都不会单独继承IDisposable。但是当我创建一个接口实例时,例如

{{1}}

并分析我的代码(使用Coverity工具)我发现资源泄漏并且对象myInterface没有释放它在内存中保存的资源。 虽然我正在使用新的MyClass()实例化MyClass实例,但是因为IMyInterface虽然没有MyClass,但它没有实现IDisposable。

那么为什么在地球上,就“myInterface”对象而言,我会抱怨资源泄漏/内存泄漏。

非常欢迎任何建议。

1 个答案:

答案 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;
}