C# 公共类MyClass:IDisposable?
Q1)我是否应该将所有类都设置为这样,以便使用(…) 这是个好习惯吗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:我
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可能对此一无所知。当然,您可以选择将其中任何一个解释为“非托管资源”。