Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тюмгу / Лекции КБ ИБАС 1 курс 2 семестр / лекция9 Безопасность 2018.pptx
Скачиваний:
14
Добавлен:
08.12.2019
Размер:
155.99 Кб
Скачать

Во многих случаях можно обойтись без этой ссылки

НО есть примеры, когда ее использование необходимо.

Пример 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