Типы в C#. Минимальный набор методов. Оператор new

C#   2 Февраль 2012  Автор статьи:  

Каждый тип в языке C# является потомком типа System.Object. Это означает, что любой экземпляр любого типа гарантировано имеет минимальный набор методов.

  • Equals – Возвращает True в случае равенства объектов
  • GetHashCode – возвращает хэш-код для значения данного объекта
  • ToString – по умолчанию возвращает полное имя типа
  • GetType – возвращает экземпляр объекта

Кроме того все типы имеют доступ к некоторым защищенным методам

  • MemberwiseClone – Это не виртуальный метод, создающий новый экземпляр типа  и присваивающий полям нового объекта соответствующие значения объекта this. После этого возвращается ссылка на созданный экземпляр
  • Finalize – этот метод вызывается, когда сборщик мусора определяет данный объект как мусор, но память, занятая объектом, еще не очищена.

Более подробно эти методы мы рассмотрим в следующих статьях.

В  С# все объекты ссылочных типов создаются с помощью оператора new.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
namespace ConsoleApplication2

{

class Program

{

static void Main(string[] args)

{

Person p = new Person();

}

}

public class Person{}

}

Оператор new делает следующее:

  1. Вычисляет число байт необходимых, всем экземплярным полям типа и всем его базовым типам вплоть до System.Object. , который не содержит экземплярных полей. Каждый объект кучи требует дополнительных членов, они называются указателями на объект-тип (type object pointer)  и индекс блока синхронизации (SyncBlockIndex) и используется C# для управления объектом
  2. Выделяется память для объекта, резервируя необходимое для данного объекта число байт в управляемой куче и обнуляя эти байты
  3. Инициализирует указатель на объект-тип и SyncBlockIndex
  4. Вызывается конструктор экземпляра типа с параметрами указанными при вызове оператора new (в нашем случае используется конструктор без параметров)

Выполнив все эти действия, оператор new возвращает ссылку на созданный экземпляр. В вышеуказанном примере данная ссылка сохранится в переменной p типа Person.

Одной из важных особенностей языка C# является отсутствие оператора delete, то есть невозможно самостоятельно   очистить память занятую объектом. Все это автоматически проделывает сборщик мусора.

  • Микола Лісняк

    Подскажите, если не трудно! Нигде не могу найти что такое  «указатель на объект-тип», и зачем он нужен.
    Спасибо!

  • Микола Лісняк

    Подскажите, если не трудно! Нигде не могу найти что такое  «указатель на объект-тип», и зачем он нужен.
    Спасибо!

Научиться программировать

  • на Delphi

  • на Java

  • на C++