2016-07-21 16 views
3

C# 6.0 в двух словах Джозефом Альбахари и Бен Альбахари (O'Reilly).Имеет ли тип объекта защищенный виртуальный метод Finalize?

Copyright 2016 Joseph Albahari and 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.

Что мне не хватает? Это ошибка автора?

ответ

4

От MSDN:

C# компилятор не позволяет переопределить метод Finalize. Вместо этого вы предоставляете финализатор, реализуя деструктор для вашего класса . Деструктор C# автоматически вызывает деструктор своего базового класса .

Вы должны использовать ~ClassName() для реализации destructor.

Object.cs написано на C#, поэтому у него есть ~Object() вместо Finalize().

Я предлагаю вам прочитать эту article и это answer

От Eric Lippert:

Эта функция запутанным, подверженной ошибкам, и широко непонятым. Он имеет синтаксис, очень знакомый пользователям C++, но удивительно отличающийся от семантики. И в большинстве случаев использование этой функции является опасным, ненужным или симптомом ошибки.
Иногда вам необходимо реализовать функции, которые предназначены только для экспертов, которые являются строительной инфраструктурой; эти функции должны быть четко обозначены как опасные, не привлекательно похожие на функции с других языков.