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);
}