【发布时间】:2015-11-14 15:22:51
【问题描述】:
我正在编写一个 C# 程序,其中我有一个继承多个接口的类,如下所示
class MyClass:IMyInterface,IExampleInterface,IDisposable
{
}
但是 IMyInterface 或 IExampleInterface 都不是单独继承 IDisposable 的。但是当我创建一个接口的实例时,例如
IMyInterfacce myInterface = new MyClass();
并分析我的代码(使用 Coverity 工具)我发现存在资源泄漏并且对象 myInterface 没有释放它在内存中持有的资源。 虽然我正在使用 new MyClass() 实例化 MyClass 实例,但 IMyInterface 并没有实现 IDisposable 虽然 MyClass 实现。
那么,就“myInterface”对象而言,我到底为什么会抱怨资源泄漏/内存泄漏。
非常欢迎任何建议。
【问题讨论】:
-
IMyInterface只是一个接口,它没有实现,它基本上是一个代码合同,所以它不能保存内存。无论你的实现是做什么的。 -
如果
MyClass的任何接口有implIDisposable,你为什么要尝试在MyClass中实现呢?而如果IMyInterfacce不是implIDisposable,但是你使用IMyInterfacce myInterface = new MyClass();,你不能dispose你的对象,你需要使用类型转换。 -
@Ron 你是绝对正确的,IMyInterface 没有实现所以不能保存内存。但是当我实例化 IMyInterface myInterface = new MyClass();这就是 myInterface 占用内存空间并且在代码超出范围后不会释放它的时候。
-
@user2913184
IDisposable不会自动释放资源,它只会在您显式调用Dispose或在调用Dispose的using语句中使用它时释放它们。 -