Меню
Разработки
Разработки  /  Информатика  /  Презентации  /  Прочее  /  Конструкторы и деструкторы в языке С#

Конструкторы и деструкторы в языке С#

Данная разработка содержит материал по использованию конструкторов и деструкторов в языке С#. Материал полезен для подготовки и проведения занятий по дисциплине "Основы алгоритмизации и программирования" специальности 09.-02.07
23.12.2019

Содержимое разработки

Занятие №44 Конструкторы и деструкторов в языке С#.

Занятие №44

Конструкторы и деструкторов в языке С#.

 Кроме обычных методов в классах используются также и специальные методы, которые называются  конструкторами . Конструкторы вызываются при создании нового объекта данного класса. Конструкторы выполняют инициализацию объекта.  Каждый раз, когда создается класс, вызывается конструктор. Класс может иметь несколько конструкторов, принимающих различные аргументы. Конструкторы позволяют программисту задавать значения по умолчанию, ограничивать число установок и писать код, который является гибким и удобным для чтения. Конструктор по умолчанию  Если в классе не определено ни одного конструктора, то для этого класса автоматически создается конструктор по умолчанию. Такой конструктор не имеет параметров и не имеет тела.  Рассмотренный ранее класс Person не имеет никаких конструкторов. Поэтому для него автоматически создается конструктор по умолчанию. И мы можем использовать этот конструктор. В частности, создадим один объект класса Person:

Кроме обычных методов в классах используются также и специальные методы, которые называются  конструкторами . Конструкторы вызываются при создании нового объекта данного класса. Конструкторы выполняют инициализацию объекта.

Каждый раз, когда создается класс, вызывается конструктор. Класс может иметь несколько конструкторов, принимающих различные аргументы. Конструкторы позволяют программисту задавать значения по умолчанию, ограничивать число установок и писать код, который является гибким и удобным для чтения.

Конструктор по умолчанию

Если в классе не определено ни одного конструктора, то для этого класса автоматически создается конструктор по умолчанию. Такой конструктор не имеет параметров и не имеет тела.

Рассмотренный ранее класс Person не имеет никаких конструкторов. Поэтому для него автоматически создается конструктор по умолчанию. И мы можем использовать этот конструктор. В частности, создадим один объект класса Person:

class Person {      public string name; // имя      public int age;     // возраст        public void GetInfo()      {          Console.WriteLine($

class Person

{

     public string name; // имя

     public int age;     // возраст

 

     public void GetInfo()

     {

         Console.WriteLine($"Имя: {name}  Возраст: {age}");

     }

}

class Program {      static void Main(string[] args)      {          Person tom = new Person();          tom.GetInfo();       // Имя: Возраст: 0            tom.name =

class Program

{

     static void Main(string[] args)

     {

         Person tom = new Person();

         tom.GetInfo();       // Имя: Возраст: 0

 

         tom.name = "Tom";

         tom.age = 34;

         tom.GetInfo();   // Имя: Tom Возраст: 34

         Console.ReadKey();

     }

}

 Для создания объекта Person используется выражение  new Person() .  Оператор  new  выделяет память для объекта Person. И затем вызывается конструктор по умолчанию, который не принимает никаких параметров.  В итоге после выполнения данного выражения в памяти будет выделен участок, где будут храниться все данные объекта Person.  А переменная tom получит ссылку на созданный объект.  Если конструктор не инициализирует значения переменных объекта, то они получают значения по умолчанию. Для переменных числовых типов это число 0, а для типа string и классов - это значение  null  (то есть фактически отсутствие значения).

Для создания объекта Person используется выражение  new Person() .

Оператор  new  выделяет память для объекта Person. И затем вызывается конструктор по умолчанию, который не принимает никаких параметров.

В итоге после выполнения данного выражения в памяти будет выделен участок, где будут храниться все данные объекта Person.

А переменная tom получит ссылку на созданный объект.

Если конструктор не инициализирует значения переменных объекта, то они получают значения по умолчанию. Для переменных числовых типов это число 0, а для типа string и классов - это значение  null  (то есть фактически отсутствие значения).

 После создания объекта мы можем обратиться к переменным объекта Person через переменную tom и установить или получить их значения, например,  tom.name =

После создания объекта мы можем обратиться к переменным объекта Person через переменную tom и установить или получить их значения, например,  tom.name = "Tom"; .

Консольный вывод этой программы:

Создание конструкторов  В примерах ранее для инициализации объекта использовался конструктор по умолчанию. Однако можно определить свои конструкторы: Class Person {  public string name;  public int age;  public Person() { name =

Создание конструкторов

В примерах ранее для инициализации объекта использовался конструктор по умолчанию. Однако можно определить свои конструкторы:

Class Person

{

public string name;

public int age;

public Person() { name = "Неизвестно"; age = 18; } // 1 конструктор

public Person(string n) { name = n; age = 18; } // 2 конструктор

Person sam = new Person("Sam", 25); // вызов 3-его конструктора с двумя параметрами

public void GetInfo()

{

Console.WriteLine($" Имя: { name} Возраст: { age}");

}

}

bob.GetInfo(); // Имя: Bob Возраст: 18 tom.GetInfo(); // Имя: Неизвестно Возраст: 18 sam.GetInfo(); // Имя: Sam Возраст: 25  Console.ReadKey(); } Консольный вывод данной программы: Имя: Неизвестно Возраст: 18 Имя: Bob Возраст: 18 Имя: Sam Возраст: 25  При этом если в классе определены конструкторы, то при создании объекта необходимо использовать один из этих конструкторов.

bob.GetInfo(); // Имя: Bob Возраст: 18

tom.GetInfo(); // Имя: Неизвестно Возраст: 18

sam.GetInfo(); // Имя: Sam Возраст: 25

Console.ReadKey();

}

Консольный вывод данной программы:

Имя: Неизвестно Возраст: 18

Имя: Bob Возраст: 18

Имя: Sam Возраст: 25

При этом если в классе определены конструкторы, то при создании объекта необходимо использовать один из этих конструкторов.

Деструкторы  В С# существует специальный вид метода, называемый деструктором , который вызывается сборщиком мусора непосредственно перед удалением объекта из памяти.  Сборщик мусора удаляет объекты, на которые нет ссылок. Он работает в соответствии со своей внутренней стратегией в неизвестные для программиста моменты времени.  В деструкторе описываются действия, гарантирующие корректность последующего удаления объекта. Например, проверяется все ли ресурсы, используемые объектом, освобождены (файлы закрыты,  удаленное соединение  разорвано и т. п.). Синтаксис деструктора: [атрибуты] [extern] ~имя_класса(){тело_деструктора}

Деструкторы

В С# существует специальный вид метода, называемый деструктором , который вызывается сборщиком мусора непосредственно перед удалением объекта из памяти.

Сборщик мусора удаляет объекты, на которые нет ссылок. Он работает в соответствии со своей внутренней стратегией в неизвестные для программиста моменты времени.

В деструкторе описываются действия, гарантирующие корректность последующего удаления объекта. Например, проверяется все ли ресурсы, используемые объектом, освобождены (файлы закрыты,  удаленное соединение  разорвано и т. п.).

Синтаксис деструктора:

[атрибуты] [extern] ~имя_класса(){тело_деструктора}

 Деструктор не имеет параметров, не возвращает значения и не требует указания спецификаторов доступа. Его имя совпадает с именем класса, перед которым ставится тильда  ( ~ ), указывающая на обратные по отношению к конструктору действия. Тело деструктора представляет собой блок или просто точку с запятой. Если деструктор определен как внешний, то используется спецификатор extern .  Пример: class DemoArray {  int[] MyArray;// закрытый  массив   string name; // закрытое  поле   public DemoArray(int size,int x, string name)// конструктор

Деструктор не имеет параметров, не возвращает значения и не требует указания спецификаторов доступа. Его имя совпадает с именем класса, перед которым ставится тильда  ( ~ ), указывающая на обратные по отношению к конструктору действия. Тело деструктора представляет собой блок или просто точку с запятой. Если деструктор определен как внешний, то используется спецификатор extern .

Пример:

class DemoArray

{

int[] MyArray;// закрытый массив

string name; // закрытое поле

public DemoArray(int size,int x, string name)// конструктор

{  MyArray = new int[size];  this.name = name;  for (int i=0;i MyArray[i]=x;  }  public void Print ()// метод   {   Console.Write(name+

{

MyArray = new int[size];

this.name = name;

for (int i=0;i

MyArray[i]=x;

}

public void Print ()// метод

{

Console.Write(name+ " : ");

foreach (int a in MyArray)

Console.Write(a+" ");

Console.WriteLine();

}

public int LengthN // свойство

{  get { return MyArray.Length; }  }  ~DemoArray()// деструктор   {  Console.WriteLine(

{

get { return MyArray.Length; }

}

~DemoArray()// деструктор

{

Console.WriteLine("сработал деструктор для объекта "+this.name);

}

}

class Program

{

static void Main()

{

DemoArray a= new DemoArray(5,2, " один ");

 a.Print();  DemoArray b = new DemoArray(6,1,

a.Print();

DemoArray b = new DemoArray(6,1, " два ");

b.Print();

a = b;

a.Print();

}

}

В общем случае применение деструкторов замедляет процесс сборки мусора. Поэтому создавать деструкторы следует только тогда, когда необходимо освободить какие-то ресурсы перед удалением объекта.

-75%
Курсы повышения квалификации

Современный урок информатики в условиях реализации ФГОС

Продолжительность 108 часов
Документ: Удостоверение о повышении квалификации
5900 руб.
1480 руб.
Подробнее
Скачать разработку
Сохранить у себя:
Конструкторы и деструкторы в языке С# (49.5 KB)

Комментарии 0

Чтобы добавить комментарий зарегистрируйтесь или на сайт