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),它不是一个方法,或参数或任何东西,它是什么,为什么它之前有一个波浪号?
答案 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 Resources。 Framework Design Guidelines也有更多信息。
答案 4 :(得分:0)
Ack,我刚刚找到答案,看不懂如何删除我的问题。它指定了类
的析构函数答案 5 :(得分:0)
我对C#没有任何线索,但是根据代码的作用,这看起来像一个解构函数,说
handle
handle
设置为0
以确保会像“不”这样的概念一起......:)
我可能错了......
格尔茨
back2dos