C# 何时处置?

C# 何时处置?,c#,.net,idisposable,using-statement,C#,.net,Idisposable,Using Statement,我对所有关于IDispose和“使用”语句的讨论感到困惑。我想知道是否有人能告诉我在下面的测试示例中是否需要使用“using”语句或某种IDispose实现 public class Main() { MyFile myFile = new MyFile("c:\subdir\subdir2\testFile.txt"); Console.Writeline("File Name: " + myFile.FileName() + "File Size: " + myFile.Fi

我对所有关于IDispose和“使用”语句的讨论感到困惑。我想知道是否有人能告诉我在下面的测试示例中是否需要使用“using”语句或某种IDispose实现

public class Main()
{
    MyFile myFile = new MyFile("c:\subdir\subdir2\testFile.txt");
    Console.Writeline("File Name: " + myFile.FileName() + "File Size: " + myFile.FileSize());
}

public class MyFile
{
    private FileInfo _fInfo;

    public MyFile(string fullFilePath)
    {
        _fInfo = new FileInfo(fullFilePath);
    }

    public string FileName()
    {
        return _fInfo.Name;
    }

    public long FileSize()
    {
        return _fInfo.Length;
    }

}

不,您的示例不使用任何需要处理的资源(它不涉及任何实现
IDisposable
,或对非托管资源具有任何直接句柄),因此您不需要实现
IDisposable


现在,如果您更改了类以打开文件,并维护一个引用打开文件句柄的
FileStream
字段,那么实现
IDisposable
来关闭流将是有意义的。

在您的示例中,没有什么要处理的,因此您无需这样做。
如果您想在文件中读/写,可以使用Streamreader/Streamwriter,这样您就需要在使用这些对象后处理它们

using(StreamReader sreader=new StreamReader())
{
//your code
}

因此,在本例中,使用语句将帮助您不要考虑手动处理/关闭对象

否,在提供的代码中,我没有看到任何需要处理的资源。因此答案是否定的,不要在这个代码中使用它。

在你的代码中不需要使用任何
处理
/
-有关
IDisposable
的明确指南,请参见。

首先,在C#NET中,你永远不能确定你已经处理了任何对象。GC会为你做这件事。虽然您可以在析构函数中告诉一些事情,但它仍然不会根据您的意愿释放内存。其次,使用语句比创建代码和实现IDisposable或创建一次性方法更干净。当using语句的作用域到达end时,内部定义和初始化的所有变量都将被终止。@AnubhavSaini:这是false。GC不会为您处理,如果调用dispose.GC,您可以始终确保已处理。处置处置。调用Dispose方法将确保您已释放。当它被处置时,没有人知道。运行时仍然会破坏对象。在大多数情况下,使用Using语句并尝试编写异常安全处理函数@谢谢,你还是错了。调用
Dispose
时,对象会立即被释放。你把GC和Disposition搞混了。如果我添加了一行如下的代码,可能会重复什么?string[]fileEntries=Directory.GetFiles(dirPath);无需再次处理。您不需要像我的示例中的streamreader那样创建需要处理的对象:)在这里,您能解释一下
using()
和dispose方法之间的相似性吗?我还记得另一个问题,Lippert说差别很小,但我记不清到底是什么。@Walkereno:A
using
语句相当于
try
/
finally
块,该链接是使用IDisposable界面的最佳解释!