
- •Перегрузка методов
- •Сигнатура метода
- •Пример 2. В сигнатуре метода игнорируется ключевое слово params,
- •Правило определения методов : все методы в классе должны иметь разные сигнатуры.
- •Неявные преобразования при использовании перегруженных методов
- •Правило 2. Это правило связано с
- •Правило 3. Мнимая неоднозначность:
- •Использование ключевого слова this
- •Во многих случаях можно обойтись без этой ссылки
- •Пример 2.
- •class MyData
- •public MyData GetMoreHigh (MyData aData)
- •class Test
- •Конструкторы
- •НО в большинстве случаев не используют автоинициализацию :
- •Подобный подход к инициализации не подходит, например,
- •Определение конструктора
- •Идентификатор конструктора class_name
- •Конструктор с пустым списком формальных параметров называется конструктором по умолчанию.
- •Вызов конструктора
- •правая часть конструкции – это оператор new для создания экземпляра класса.
- •Деструкторы
- •суть механизма СМ (GC):
- •Cлучаи, когда объект становится недоступным:
- •Сборка мусора решает две основные задачи:
- •Такой прием используется, чтобы
- •!! отсутствует
- •Алгоритм использования деструкторов
- •По завершении поиска недоступных объектов выполняются коды деструкторов отобранных объектов.
- •При этом объекты не только
- •using System;
- •//создание объекта, локализованного в методе

По завершении поиска недоступных объектов выполняются коды деструкторов отобранных объектов.
Ссылки на объекты, для которых выполнились деструкторы, размещаются в списке объектов, подлежащих удалению, но само удаление происходит в следующем сеансе сборки мусора!
Выводы:
Порядок исполнения деструкторов неизвестен.
Когда будет вызван деструктор, неизвестно.
Неизвестно, будет ли деструктор вызван вообще.
Обработка объектов с деструкторами требует дополнительных ресурсов памяти и процессорного времени.
31

При этом объекты не только
занимают память,но и могут содержать ссылки на другие
объекты с деструкторами,это, в свою очередь, задержит их
уничтожение.
Ситуации, когда использование |
||
|
деструкторов оправданно: |
|
|
|
деструктор может потребоваться для |
|
освобождения ресурсов, занятых объектом |
|
|
(например, запись данных в файл и/или его |
|
|
закрытие |
|
|
|
деструктор позволяет узнать, |
|
|
когда же происходит сборка мусора. |
32

using System;
namespace destr_test
{
class Destruct
{
private int k;
//конструктор
public Destruct (int i)
{
k = i;
}
//деструктор
~Destruct ()
{
Console.WriteLine ("Удаление " + k);
}
33

//создание объекта, локализованного в методе
public void Obj_Generator (int i)
{
Destruct obj = new Destruct(i);
}
}
class Class1
{
static void Main(string[ ] args)
{
int count;
Destruct obj = new Destruct (0);
//создаем много объектов
for (count = 1; count < 10000; count++)
obj.Obj_Generator (count);
}
}
}
34