波浪号(〜)字符在这里做什么

时间:2009-08-26 00:11:11

标签: c# tilde

  

可能重复:
  What does the tilde (~) mean in C#?

class ResourceWrapper
{
    int handle = 0;
    public ResourceWrapper()
    {
        handle = GetWindowsResource();
    }
    ~ResourceWrapper()                     //this line here
    {
        FreeWindowsResource(handle);
        handle = 0;
    }
    [DllImport("dll.dll")]
    static extern int GetWindowsResource();
    [DllImport("dll.dll")]
    static extern void FreeWindowsResource(int handle);
}

波浪线在指示的线上做了什么。

我认为它是按位NOT运算符,事实上我并不真正理解那里的整个块,(注释行和后面的括号blovk),它不是一个方法,或参数或任何东西,它是什么,为什么它之前有一个波浪号?

6 个答案:

答案 0 :(得分:10)

那是destructor。注意所有资源都是在垃圾回收时释放的。

答案 1 :(得分:3)

这实现了类的终结器(Finalize方法)。 通常你不应该实现终结器。

E.g。对于拥有外部非托管资源的类执行此操作,但在这种情况下也一定要实现IDisposable Pattern。

答案 2 :(得分:3)

与C ++类似,~ClassName是析构函数方法。当有问题的对象被垃圾收集器清理时,它在C#中被调用。与在调用析构函数时存在确定性时间的C ++不同,没有办法预测在C#中何时调用它(或者甚至它将被调用)。

您可能正在寻找的是IDisposable模式,它为此提供了更好的方法。

答案 3 :(得分:1)

那是Destructor。它为您提供了释放资源的隐式控制。也就是说,它由Garbage Collector调用。如果您希望明确控制资源的发布,可以实施IDisposable签出Implementing Finalize and Dispose to Clean Up Unmanaged ResourcesFramework Design Guidelines也有更多信息。

答案 4 :(得分:0)

Ack,我刚刚找到答案,看不懂如何删除我的问题。它指定了类

的析构函数

答案 5 :(得分:0)

我对C#没有任何线索,但是根据代码的作用,这看起来像一个解构函数,说

  1. 释放handle
  2. 引用的资源
  3. handle设置为0以确保
  4. 会像“不”这样的概念一起......:)

    我可能错了......

    格尔茨

    back2dos