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

Определение и вызов методов

Определение метода состоит из заголовка и тела метода.

Заголовок определяет спецификацию метода, то есть показывает то, как осуществляется доступ к методу.

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

В последнем случае непустое тело определяется отдельно.

Общий синтаксис определения метода имеет вид:

access spec ret_type met_name (form_param_list)

{

`statements

}

11

access – необязательный элемент, определяющий уровень доступа к методу,

spec - также необязательный элемент, возможным значением которого может быть одно из следующих:

static, new, virtual, sealed, override, abstract, extern.

ret_type - тип возвращаемого результата (встроенный или пользовательский, void – если метод ничего не возвращает),

met_name - имя метода

(имя Main зарезервировано для метода, с которого начинается выполнение программы),

form_param_list - необязательный список формальных параметров.

Вызов метода определяется правилом:

class_name.met_name (fact_param_list)

12

object_name.met_name (fact_param_list)

идентификатор класса class_name для метода класса и идентификатор экземпляра object_name для метода экземпляра необходимы только при вызове метода вне своего класса.

Список фактических параметров fact_param_list должен обеспечивать следующее

соответствие:

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

Возврат из метода происходит в случае:

1)достижения закрывающей фигурной скобки метода,

2)при выполнении оператора return

(их может быть несколько). В методах типа void этот оператор имеет вид

return;

13

В методах, возвращающих некоторое значение вызвавшей их подпрограмме, оператор содержит дополнительный элемент:

return value;

value – выражение, значение которого возвращается по завершении выполнения метода.

Особенности статических методов.

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

И наоборот, любому методу экземпляра доступны статические переменные и методы.

14

Использование параметров

список формальных параметров в простейшем случае содержит объявления параметров :

(par_type1 par_name1, par_type2 par_name2,...)

Параметры доступны в пределах своего метода, где действуют подобно локальным

переменным.

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

15

Ссылочные параметры

в C# все типы делятся на типы-значения и ссылочные типы.

Принадлежность типа формального параметра метода к одной из этих двух категорий определяет

наличие или

отсутствие изменений параметра фактического:

при передаче фактического параметра - переменной ссылочного типа все изменения в пределах метода формального параметра отражаются на исходной переменной;

при передаче фактического параметра - переменной типа-значения его значение просто копируется в формальный параметр, и, соответственно, никаких изменений исходной переменной не происходит.

16

Можно явно определить ссылочные параметры, независимо от их типа.

Для этого в списках как формальных, так и фактических параметров перед ссылочным параметром указывается ключевое слово ref.

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

Например, так можно применить это правило для метода, меняющего местами значения двух целых переменных:

17

class Changing

{

public static void Main( )

{

int i1 = 1; int i2 = 2;

Change(ref i1, ref i2); //правильно Change(ref 11, ref 12); //неправильно

...

}

public static void Change (ref int x, ref int y)

{

int buf; buf=x; x=y; y=buf;

}

}

18

Выходные параметры

Язык C# требует, чтобы любая переменная, которая используется в качестве фактического параметра при вызове метода, была

предварительно инициализирована.

НО во многих методах среди формальных параметров есть определяемые в самом методе - выходные.

Их инициализация бессмысленна.

Эта проблема решается путем явного объявления параметра именно выходным с помощью ключевого слова out, которое указывается и для формального, и для фактического параметра.

19

class myClass

{

public static void Main( )

{

int i1; int i2;

Init2int(out i1, out i2);

...

}

public static void Init2int (out int x, out int y)

{

x=100;

y=200;

}

}

20