Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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# 波浪号(~)字符在这里做什么_C#_Tilde - Fatal编程技术网

C# 波浪号(~)字符在这里做什么

C# 波浪号(~)字符在这里做什么,c#,tilde,C#,Tilde,可能重复: 图中所示线条上的波浪线是做什么的 我以为它是按位NOT运算符,事实上我不太明白那里的整个块(注释行和它后面的括号blovk),它不是一个方法,或一个参数或任何东西,它是什么,为什么它前面有一个波浪线?就是这样。它负责在垃圾收集时释放所有资源 这实现了类的finalizer(Finalize方法)。 通常,您不应该实现终结器 例如,对包含外部非托管资源的类执行此操作,但在这种情况下也一定要实现IDisposable模式。Ack,我刚刚找到答案,看不到如何删除我的问题。它指定了类的析构

可能重复:

图中所示线条上的波浪线是做什么的


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

就是这样。它负责在垃圾收集时释放所有资源

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


例如,对包含外部非托管资源的类执行此操作,但在这种情况下也一定要实现IDisposable模式。

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

我对C#没有任何线索,但从代码的作用来看,这看起来像一个解构器,表示

  • 释放
    句柄引用的资源
  • handle
    设置为
    0
    以确保
  • 也会和“不”的概念一起出现…:)

    但我可能错了

    格里茨


    Re2DOS

    ,像C++一样,<代码> ~CaseNox<代码>是析构函数方法。当垃圾收集器清理相关对象时,它在C#中被调用。不同于C++,当析构函数被调用时,存在确定性时间,无法预测何时调用C(或即使调用它)。


    您可能正在寻找的是
    IDisposable
    模式,它提供了一种更好的方法。它为您提供了释放资源的隐式控制。也就是说,它被称为。如果希望对资源的释放进行显式控制,可以实现签出。在C++中,这将意味着方法-RealthCrPrPar是析构函数(清理资源),它看起来像是基于代码在那里做的。我从来没有在C#中看到过。stackoverflow的问题不应该被删除(我不知道它们是否可以被删除)。。。其他人可能有相同的问题,然后找到你的问题(假设每个人在提问之前都使用搜索功能…否则他们将作为此问题的副本关闭)@yshuditelu:谢谢更正。实际上,yshuditelu是错误的,
    ~ClassName
    是终结器(即
    Object.Finalize()
    )-如果您使用
    ildasm
    查看编译到的
    ~ClassName
    是什么,您将看到它变成了
    override Finalize
    。之所以使用这个特殊名称,是因为与简单的重写相比,它有一点神奇——C#编译器总是插入对
    base.Finalize()
    @Pavel:的调用,而在内部它确实调用base.Finalize()方法,它被称为析构函数(C#programming guide:)。只是出于好奇:这为什么会被否决?所有其他答案都表明我的猜测是正确的……我没有投赞成票或反对票,但在猜测中,可能是因为你显然只是在猜测(即使答案是正确的,也很难相信答案),或者是因为你的名字错了。它是析构函数,而不是解构器。对我来说,这两件事似乎都是微不足道的抱怨,但有些人可能会觉得它们值得一试。。。事实上,从代码中可以明显看出这一点,但我想强调的是,我不能100%确定,因为我真的不知道C#。。。这是否意味着,我应该否决其他平台/语言的人将他们的一般知识应用到我的专业领域(通常与正确答案相去甚远,但甚至不承认他们不熟悉该平台(在.NET和java开发人员中非常流行)),甚至都不想指出他们为什么错了?无论如何,谢谢你的努力……;)你的猜测是对的。。。但如果你只是在猜测,最好不要回答,这样你就不会被否决。回答你肯定知道的主题。
    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);
    }