Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有接口和内存泄漏的C#多重继承_C#_.net - Fatal编程技术网

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

具有接口和内存泄漏的C#多重继承,c#,.net,C#,.net,我正在编写一个C#程序,其中有一个类继承了多个接口,如下所示 class MyClass:IMyInterface,IExampleInterface,IDisposable { } 但同样地,IMyInterface或IExampleInterface都不单独继承IDisposable。但当我创建一个接口实例时,例如 IMyInterfacce myInterface = new MyClass(); 并分析我的代码(使用Coverity工具),我发现有一个资源泄漏,并且对象my

我正在编写一个C#程序,其中有一个类继承了多个接口,如下所示

 class MyClass:IMyInterface,IExampleInterface,IDisposable
 {
 }
但同样地,IMyInterface或IExampleInterface都不单独继承IDisposable。但当我创建一个接口实例时,例如

  IMyInterfacce myInterface = new MyClass();
并分析我的代码(使用Coverity工具),我发现有一个资源泄漏,并且对象myInterface没有释放内存中由它持有的资源。 虽然我正在使用new MyClass()实例化MyClass实例,但同样地,IMyInterface并没有实现IDisposable,尽管MyClass实现了IDisposable

那么,就“myInterface”对象而言,到底为什么我会收到关于资源泄漏/内存泄漏的投诉呢


非常欢迎任何建议。

当您创建一个类并将其分配给接口时,您仍然创建了该类类型的实例

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

创建类并将其分配给接口时,仍然创建了该类类型的实例

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

IMyInterface
只是一个接口,它没有实现,基本上是一个代码契约,所以它不能保存内存。无论在您的实现中是什么,都在执行它。如果
MyClass
的任何接口都具有impl
IDisposable
,为什么要在MyClass中尝试impl它?如果
imyinterface
不是impl
IDisposable
,但您使用
imyinterface myInterface=new MyClass(),您无法处理对象,您需要使用类型转换。@Ron您完全正确,IMyInterface没有实现,因此无法保存内存。但是当我实例化IMyInterface myInterface=newmyclass()时;这就是myInterface在内存中占用空间,并且在代码超出范围后不会释放它。@user2913184
IDisposable
不会自动释放资源,它只在您显式调用
Dispose
或在
using
语句中使用时释放资源,它调用了
Dispose
。我想为什么在我实例化IMyInterface时,MyClass上的implicisposable为处理myInterface对象提供了理由。
IMyInterface
只是一个接口,它没有实现,它基本上是一个代码契约,所以它不能保存内存。无论在您的实现中是什么,都在执行它。如果
MyClass
的任何接口都具有impl
IDisposable
,为什么要在MyClass中尝试impl它?如果
imyinterface
不是impl
IDisposable
,但您使用
imyinterface myInterface=new MyClass(),您无法处理对象,您需要使用类型转换。@Ron您完全正确,IMyInterface没有实现,因此无法保存内存。但是当我实例化IMyInterface myInterface=newmyclass()时;这就是myInterface在内存中占用空间,并且在代码超出范围后不会释放它。@user2913184
IDisposable
不会自动释放资源,它只在您显式调用
Dispose
或在
using
语句中使用时释放资源,调用
Dispose
。我想为什么在我实例化IMyInterface时,MyClass上的implicisposable会导致处理myInterface对象。@shf301我想这绝对是我想要的。谢谢你,朋友。@user2913184如果你发现这个问题很有帮助,请将问题标记为已回答。@shf301我想这绝对是我要找的。谢谢你的朋友。@user2913184如果你觉得这很有帮助,请把问题标记为已回答。