Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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# 公共类MyClass:IDisposable?_C#_.net - Fatal编程技术网

C# 公共类MyClass:IDisposable?

C# 公共类MyClass:IDisposable?,c#,.net,C#,.net,Q1)我是否应该将所有类都设置为这样,以便使用(…) 这是个好习惯吗 public void Dispose() { // in its simplest form } Q2)除了我使用的需要关闭的特定对象的代码之外,还有什么我应该添加到Dispose()方法中的吗 NB1:我知道我必须通过以下两种方式之一处理IDisposable类: 1) myClass.Dispose() 2) 使用(MyCalss myClass=new myClass()) NB2:我

Q1)我是否应该将所有类都设置为这样,以便使用(…)

这是个好习惯吗

public void Dispose()
    {
        // in its simplest form
    }
Q2)除了我使用的需要关闭的特定对象的代码之外,还有什么我应该添加到Dispose()方法中的吗

NB1:我知道我必须通过以下两种方式之一处理IDisposable类:

1) myClass.Dispose()

2) 使用(MyCalss myClass=new myClass())


NB2:我有一些类需要在整个应用程序中运行,所以我不会让这些IDisposable。

不,你不必让所有类都实现IDisposable接口。仅当类使用非托管资源时,才应执行此操作

根据:

此接口的主要用途是释放非托管资源。 垃圾回收器会自动释放分配给 当不再使用托管对象时。然而,事实并非如此 可以预测垃圾回收何时发生。此外,, 垃圾收集器不知道非托管资源,例如 窗口句柄,或打开文件和流

我有一些类需要在整个应用程序中运行,所以我不会让这些IDisposable


在这种情况下,如果,您不想创建这些类的实例,一个合理的解决方案是使它们
静态

不,您当然不应该让所有类都实现
IDiposable
。与所有事情一样,你应该选择做一些事情,因为你有一个积极的案例,这是一个好主意。当你使用IDISPOSILABLE时,理解的好资源是什么?你在使用<代码>使用(…)< /代码>时有什么优势(或者你认为你认为什么不太可取)?我不同意。IDisposable对于任何需要清理的类都很有用,即使清理不涉及非托管资源。当然,并非所有类都需要清理。但对于那些这样做的人来说,IDisposable是一条出路。@MikeNakis你的论点是有道理的。但是,我个人倾向于在必须释放非托管资源的情况下使用此接口。这并不意味着您的方法不正确。我认为对于不包含非托管资源或从IDisposable继承的资源的类来说,这不是实现IDisposble的好方法。如果您想要清理托管资源,可以使用GarbageCollector。但是GC不能清理非托管资源,所以在这种情况下,IDIsposable create是可以创建的,我认为没有其他原因。任何需要确定性清理的东西都是
IDIsposable
的好选择。当我有一个类需要立即清理时,我经常使用它,我不能等待GC来清理。@PeterM.:“清理”不限于释放内存。它还可能意味着“恢复设置”或“更改某个所有者对象的状态”,GC可能对此一无所知。当然,您可以选择将其中任何一个解释为“非托管资源”。