Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ПИ Программирование на С# _Хотов.docx
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
2.22 Mб
Скачать

«Один класс – один файл»,

С добавлением новых классов в программу резко увеличивается ее размер, что затрудняет ее прочтение. Поэтому следует руководствоваться одним простым принципом «один класс – один файл». Для того чтобы создать новый файл для класса Circle выполним следующие действия:

  1. В окне Solution Explorer щелкните правой кнопкой на имени проекта Hello (на рисунке выделен жирным).

  1. Выполните команду Add/Add Class…

В поле Name напишите Сircle.cs и нажмите кнопку Add.

Теперь окно Solution Explorer выглядит следующим образом:

А файл Circle.cs выглядит следующим образом:

using System;

namespace ConsoleApplication1

{

public class Circle

{

public Circle()

{

//

// TODO: Add constructor logic here

//

}

}

}

  1. Замените namespace ConsoleApplication1 на namespace MyProgram, для того чтобы идентификаторы файлов Program.cs и Circle.cs были определены в одном пространстве имен.

  2.  Перенесите класс Circle из файла Program.cs в файл Circle.cs.

  3. Теперь запустите программу и посмотрите, что она делает.

    1. Классы (продолжение)

      1. Деструкторы

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

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

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

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

[атрибуты] [extern] ~имя_класса()

{тело_деструктора}

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

using System;

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 < size; ++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("сработал деструктор для объекта " + this.name);

}

}

class Program

{

static void Main()

{

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

a.Print();

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

b.Print();

a = b;

a.Print();

}

}

Задание. Обратите внимание на то, что деструкторы были вызваны автоматически. Дайте объяснение тому, в какой последовательности были вызваны деструкторы.

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