【问题标题】:Does the object type contain a protected virtual Finalize method?对象类型是否包含受保护的虚拟 Finalize 方法?
【发布时间】:2016-07-21 10:54:14
【问题描述】:

Joseph Albahari 和 Ben Albahari (O'Reilly) 的 C# 6.0 简述。

版权所有 2016 Joseph Albahari 和 Ben Albahari,978-1-491-92706-9。

在第 100-101 页声明对象类成员是:

public class Object
{
    public Object();
    public extern Type GetType();
    public virtual bool Equals (object obj);
    public static bool Equals (object objA, object objB);
    public static bool ReferenceEquals (object objA, object objB);
    public virtual int GetHashCode();
    public virtual string ToString();
    protected virtual void Finalize(); //<-- this one
    protected extern object MemberwiseClone();
}

这促使我去检查 VS's intellisense 是否为任何参考实例提供了 Finalize() 方法,因为我不记得见过。

我没有成功获取这样一个继承了 Finalize 成员的对象(我试图在函数内部访问它,知道它受到保护的事实)。

我检查了.NET's open source code 并且object.cs 文件不包含Finalize 方法。

我错过了什么?是不是作者搞错了?

【问题讨论】:

    标签: c# .net finalizer mscorlib


    【解决方案1】:

    来自MSDN

    C# 编译器不允许您覆盖 Finalize 方法。 相反,您通过为您的 班级。 C# 析构函数自动调用其基类的析构函数 类。

    您必须使用~ClassName() 来实现destructor

    Object.cs 是用C# 编写的,所以它有~Object() 而不是Finalize()

    我建议你阅读这个article 和这个answer

    来自Eric Lippert

    此功能令人困惑、容易出错并且被广泛误解。它 具有 C++ 用户非常熟悉的语法,但令人惊讶的不同 语义。在大多数情况下,使用该功能是危险的, 不必要的,或错误的症状。
    有时您需要实现仅供专家使用的功能 正在建设基础设施;这些特征应该清楚地标出 危险——与其他语言的功能没有相似之处。

    【讨论】:

      猜你喜欢
      • 2019-04-25
      • 2015-01-09
      • 2014-04-08
      • 1970-01-01
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      相关资源
      最近更新 更多