
- •Классы
- •Элементы класса
- •Порядок следования членов класса может быть произвольным.
- •Данные-члены
- •В примере нарушен принцип инкапсуляции –
- •пример:
- •Переменные только для чтения
- •События
- •Функции-члены
- •Определение и вызов методов
- •access – необязательный элемент, определяющий уровень доступа к методу,
- •object_name.met_name (fact_param_list)
- •В методах, возвращающих некоторое значение вызвавшей их подпрограмме, оператор содержит дополнительный элемент:
- •Использование параметров
- •Ссылочные параметры
- •Можно явно определить ссылочные параметры, независимо от их типа.
- •class Changing
- •Выходные параметры
- •class myClass
- •Массив параметров
- •заголовок универсального метода для суммирования : public static double Sum(params double [ ]
- •public static double Sum(params double [] myArray)

Определение и вызов методов
Определение метода состоит из заголовка и тела метода.
Заголовок определяет спецификацию метода, то есть показывает то, как осуществляется доступ к методу.
Тело метода состоит из блока операторов, выполняющихся при его вызове, или только точки с запятой (пустой оператор).
В последнем случае непустое тело определяется отдельно.
Общий синтаксис определения метода имеет вид:
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