4 回答
TA贡献1821条经验 获得超6个赞
〜是析构函数
析构函数是自动调用的,不能显式调用。
析构函数不能重载。因此,一个类最多可以具有一个析构函数。
析构函数不会被继承。因此,一个类除了可以在其中声明的析构函数外,没有其他析构函数。
析构函数不能与结构一起使用。它们仅与类一起使用。当不再有任何代码使用该实例时,该实例就可以销毁。
在实例符合销毁条件后的任何时候都可以执行该实例的析构函数。
当实例被销毁时,其继承链中的析构函数按从最大派生到最小派生的顺序被调用。
完成
在C#中,Finalize方法执行标准C ++析构函数将执行的操作。在C#中,您没有将其命名为Finalize,而是使用C ++析构函数语法在类名之前放置一个波浪号(〜)符号。
处理
最好将对象放置在类的用户可以显式调用的Close()
或Dispose()
方法中。GC调用Finalize(析构函数)。
该IDisposable的界面告诉你的类保存到了需要配置资源,并为用户提供一种方式来释放他们的世界。如果确实需要在类中实现终结器,则Dispose方法应使用该GC.SuppressFinalize()
方法来确保实例的终结被抑制。
使用什么?
显式调用析构函数是非法的。您的析构函数将被垃圾收集器调用。如果确实要处理您想尽快关闭并处置的宝贵的非托管资源(例如文件句柄),则应实现IDisposable接口。
TA贡献2036条经验 获得超8个赞
这是终结器。老实说,您几乎不需要编写终结器。在以下情况下,您实际上只需要写一个:
您可以直接访问非托管资源(例如通过
IntPtr
),而不能使用SafeHandle
它,这将使访问变得更容易您正在
IDisposable
未密封的类中实现。(我倾向于密封类,除非它们是为继承而设计的。)在这种情况下,终结器是规范的Dispose模式的一部分。
TA贡献1863条经验 获得超2个赞
语法元素被适当地称为析构函数。如果类具有析构函数,则C#编译器将自动生成一个终结器,该终结器包括一个通常无用的try/finally
块,以确保Finalize
调用父方法。析构函数的大多数情况适用于终结器,反之亦然,但这两个词的含义略有不同。
- 4 回答
- 0 关注
- 1708 浏览
添加回答
举报