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

Во многих случаях можно обойтись без этой ссылки
НО есть примеры, когда ее использование необходимо.
Пример 1.
В методе, предназначенном для инициализации переменных экземпляра:
удобно использовать имена формальных параметров, совпадающие с именами переменных.
Чтобы их различать, необходимо указать перед переменными ссылку this.
11

Пример 2.
метод, который
сравнивает значения некоторой переменной
экземпляра у двух объектов
(X - того, для которого метод вызван, и Y –
второго объекта) и
возвращает тот из них, у которого
соответствующее значение больше.
Фактическим параметром будет объект Y и возвращать надо один из объектов X или Y.
Для того, чтобы сослаться на объект X при возвращении значения из метода и применяется ссылка this.
Пример 3.
Ссылка this нужна, если требуется
передать в другой метод текущий объект в
качестве аргумента.
12

class MyData
{
private double height;
private string name;
public void Init2 (double height, string name)
{
this.height = height;
this.name = name;
}
public double GetHeight ()
{
return height;
}
public void PrinttHeightInch ()
{
Console.WriteLine(“H={0}дюймов”,
FromSmToInch.ToInch(this));
}
13

public MyData GetMoreHigh (MyData aData)
{
if (height > aData.GetHeight ()
return this
else
return aData;
}
}
class FromSmToInch
{
public static double ToInch (MyData SmData)
{
return SmData.GetHeight () /2.54;
}
}
14

class Test
{
public static void Main( )
{
MyData X1 = new MyData( );
MyData X2 = new MyData( );
MyData Xmax;
X1.Init2 (175, “Petrov”);
X2.Init2 (180, “Ivanov”);
Console.WriteLine(“Petrov: ” +
FromSmToInch. ToInch(X1));
Console.WriteLine(“Ivanov:”);
X2.PrinttHeightInch ();
Xmax = X2. GetMoreHigh (X1);
Xmax.PrinttHeightInch ();
}
}
15

Конструкторы
Инициализация переменных
Во время выполнения программы на C# обеспечивается автоматическая (если другая не предусмотрена) инициализация переменных.
При этом соответствующие значения зависят от типа переменной.
Как правило, это:
нулевое значение для всех числовых типов;
символ Unicode ‘\u0000’ для типа char;
значение false для типа bool;
значение null для переменных ссылочных типов.
16

НО в большинстве случаев не используют автоинициализацию :
в коде программы не видны значения, используемые для инициализации,
при этом стандартные значения могут отличаться для разных версий компилятора.
Инициализация переменной экземпляра при ее объявлении
Объявляя класс, можно проинициализировать
не только переменные класса,
но и переменные экземпляра.
Общий синтаксис :
access var_type var_name = expr;
expr – некоторое выражение.
17

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

Определение конструктора
Как правило, конструкторы используются
для инициализации переменных экземпляра и
других действий, необходимых для создания объекта.
Общий синтаксис конструктора :
access class_name (form_par_list) : this (fact_par_list)
{
statements
}
19

Идентификатор конструктора class_name
обязательно должен совпадать с идентификатором его класса.
Список формальных параметров form_par_list
может отсутствовать, но круглые скобки – обязательны.
Инициализатор конструктора
: this (fact_par_list) необязателен.
используется для вызова другого конструктора (соответствующего списку фактических параметров fact_par_list).
Вызванный конструктор будет выполнен до выполнения определяемого конструктора.
20