2015-08-20 77 views
0

我正在写一个C#程序在那里我有一个继承多个接口,如以下C#多重继承泄漏

class MyClass:IMyInterface,IExampleInterface,IDisposable 
{ 
} 

但这样既不IMyInterface的或也不IExampleInterface单独继承了IDisposable的类。但是,当我创建例如

IMyInterfacce myInterface = new MyClass(); 

和分析我的代码(使用Coverity的工具),我发现有一个资源泄漏和对象MyInterface的未释放的内存其持有的资源的接口的实例。 尽管我正在使用新的MyClass()实例化MyClass实例,但正如IMyInterface并未实现IDisposable,尽管MyClass确实如此。

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

任何建议,非常欢迎。

+2

'IMyInterface'只是一个接口,它没有一个实现,它基本上是一个代码合同,所以它不能保存内存。不管你的实施是什么,都是这样做的。 –

+0

如果'MyClass'的任何接口都有impl'IDisposable',为什么试试在MyClass中实现?如果'IMyInterfacce'不是impl'IDisposable',但是你使用'IMyInterfacce myInterface = new MyClass();',你不能处理你的对象,你需要使用类型转换。 – f14shm4n

+0

@您是绝对正确的,因为IMyInterface没有实现,因此无法保存内存。但是当我实例化IMyInterface myInterface = new MyClass();这就是myInterface占用内存中的空间的原因,并且在代码超出范围之后它不会释放它。 – user2913184

回答

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; 
} 
+0

@ shf301我想这绝对是我在找的东西。谢谢你的朋友。 – user2913184

+0

@ user2913184如果您发现这有助于将问题标记为已回答。 –