当前位置:  开发笔记 > 编程语言 > 正文

在C#中,函数名前面的代字号是什么意思?

如何解决《在C#中,函数名前面的代字号是什么意思?》经验,为你挑选了3个好方法。

我正在看一些代码,它有这样的声明:

~ConnectionManager()
{
    Dispose(false);
}

该类实现了IDisposable接口,但我不知道这是否是使用波浪号(〜)的一部分.



1> Patrick Desj..:

〜是析构函数

    析构函数是自动调用的,不能显式调用.

    析构函数不能超载.因此,一个类最多只能有一个析构函数.

    析构函数不是继承的.因此,类没有除了可以在其中声明的析构函数之外的析构函数.

    析构函数不能与结构一起使用.它们仅用于课程.当任何代码不再可能使用该实例时,实例就有资格进行销毁.

    在实例符合销毁条件后,可以在任何时候执行实例的析构函数.

    当一个实例被破坏时,它的继承链中的析构函数按顺序被调用,从大多数派生到最少派生.

最终确定

在C#中,Finalize方法执行标准C++析构函数将执行的操作.在C#中,您没有将其命名为Finalize - 您使用C++析构函数语法在类的名称前面放置代字号(〜).

部署

最好将对象置于可由类的用户明确调用的方法Close()Dispose()方法中.GC调用Finalize(析构函数).

IDisposable的界面告诉你的类保存到了需要配置资源,并为用户提供一种方式来释放他们的世界.如果确实需要在类中实现终结器,则Dispose方法使用该GC.SuppressFinalize()方法来确保抑制实例的最终化.

用什么?

明确地调用析构函数是不合法的.您的析构函数将由垃圾收集器调用.如果您确实处理了要尽快关闭和处理的宝贵的非托管资源(例如文件句柄),那么您应该实现IDisposable接口.


我不知道它过去是怎样的.但现在析构函数是继承的.查看此链接以获取更多信息(请查看最后的示例):http://msdn.microsoft.com/en-us/library/66x5fx1b.aspx

2> Jon Skeet..:

这是终结者.说实话,你应该很少需要写一个终结器.你真的只需要写一个如果:

您可以直接访问非托管资源(例如,通过IntPtr),而您无法使用SafeHandle,这使得它更容易

您正在IDisposable一个没有密封的类中实现.(我的首选是密封类,除非它们是为继承而设计的.)在这种情况下,终结器是规范Dispose模式的一部分.



3> torial..:

它用于指示类的析构函数.


它们都是正确的,取决于您阅读的C#规范.最新的MS(统一C#3.0)将它们称为析构函数(例如10.13节),但ECMA规范将它们称为终结符.
推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有