7

可能重复:
波浪号 (~) 在 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),它不是方法,也不是参数或任何东西,它是什么为什么前面有波浪号?

4

6 回答 6

10

那是析构函数。它注意在垃圾收集时释放所有资源。

于 2009-08-26T00:13:30.983 回答
3

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

例如,对持有外部非托管资源的类执行此操作,但在这种情况下也请确保实现 IDisposable 模式。

于 2009-08-26T00:13:34.730 回答
3

就像在 C++ 中一样,~ClassName是析构方法。当有问题的对象被垃圾收集器清理时,它会在 C# 中调用。与在 C++ 中调用析构函数时存在确定的时间不同,在 C# 中无法预测何时调用(或者即使调用它)。

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

于 2009-08-26T00:16:28.333 回答
1

那是一个析构函数。它使您可以隐式控制释放资源。也就是说,它由垃圾收集器调用。如果你想明确控制资源的释放,你可以实现IDisposable 查看实现 Finalize 和 Dispose 以清理非托管资源框架设计指南也有更多信息。

于 2009-08-26T00:20:10.333 回答
0

Ack,我刚刚找到了答案,但看不到如何删除我的问题。它指定了类的析构函数

于 2009-08-26T00:14:52.217 回答
0

我对C#一无所知,但从代码的作用来看,这看起来像是一个解构函数,说

  1. 释放引用的资源handle
  2. 确定handle_ 0_

也会与“不”的概念一起使用...... :)

虽然我可能是错的......

问候

back2dos

于 2009-08-26T00:14:52.513 回答