Инициализаторы переменных статических полей класса соответствуют последовательности присваиваний, выполняемых в текстовом порядке, в котором они появляются в объявлении класса.
Пример
class Test
{
static void Main() {
Console.WriteLine("{0} {1}", B.Y, A.X);
}
public static int F(string s) {
Console.WriteLine(s);
return 1;
}
}
class A
{
public static int X = Test.F("Init A");
}
class B
{
public static int Y = Test.F("Init B");
}
Методы
Метод – это член, реализующий вычисление или действие, которое может быть выполнено объектом или классом. Методы объявляются с помощью объявлений_методов:
объявление_метода:
заголовок_метода тело_метода
заголовок_метода:
атрибутынеобязательно модификаторы_методанеобязательно partialнеобязательно тип_возвращаемого_значения имя_элемента список_параметров_типанеобязательно
( список_формальных_параметровнеобязательно ) предложения_ограничений_параметров_типанеобязательно
модификатор_метода:
new
public
protected
internal
private
static
virtual
sealed
override
abstract
extern
возвращаемый_тип:
тип
void
имя_элемента:
идентификатор
тип_интерфейса . идентификатор
тело_метода:
блок
;
Объявление_метода может включать набор атрибутов и допустимое сочетание из четырех модификаторов доступа, и модификаторы new, static, virtual, override, sealed, abstract и extern.
Объявление имеет допустимое сочетание модификаторов, если верно все следующее:
· объявление включает допустимое сочетание модификаторов доступа;
· объявление не включает один и тот же модификатор несколько раз;
· объявление включает не более одного из следующих модификаторов: static, virtual и override;
· объявление включает не более одного из следующих модификаторов: new и override;
· если объявление включает модификатор abstract, то объявление не включает ни один из следующих модификаторов: static, virtual, sealed и extern;
· если объявление включает модификатор private, то объявление не включает ни один из следующих модификаторов: virtual, override и abstract;
· если объявление включает модификатор sealed, то объявление также включает модификатор override;
· если объявление включает модификатор partial, то оно не включает ни один из следующих модификаторов: new, public, protected, internal, private, virtual, sealed, override, abstract и extern.
Тип_возвращаемого_значения в объявлении метода указывает тип значения, вычисляемого и возвращаемого методом. Если метод не возвращает значение, типом_возвращаемого_значения является void.
Имя_члена указывает имя метода. Если только метод не является членом явной реализации интерфейса, имя_члена – это просто идентификатор. Для члена явной реализации интерфейса имя_члена состоит из типа_интерфейса, за которым следует «.» и идентификатор.
Необязательный список_формальных_параметров указывает параметры метода.
Для методов abstract и extern тело_метода состоит просто из точки с запятой.
Сигнатура метода состоит из его имени, числа параметров типов и числа, модификаторов и типов его формальных параметров.
Имя метода должно отличаться от имен всех других не методов, объявленных в этом же классе. Кроме того, подпись метода должна отличаться от подписей всех других методов, объявленных в этом же классе, а два метода, объявленные в одном и том же классе, не могут иметь подписи, отличающиеся только параметрами ref и out.
Все формальные параметры и параметры типов должны иметь разные имена.
Параметры метода
Параметры метода, если они имеются, объявляются списком формальных параметров метода.
список_формальных_параметров:
фиксированные_параметры , массив_параметров
фиксированный_параметр:
атрибутынеобязательно модификатор_параметранеобязательно тип идентификатор аргумент_по_умолчаниюнеобязательно
аргумент_по_умолчанию:
= выражение
модификатор_параметра:
ref
out
this
массив_параметров:
атрибутынеобязательно params тип_массива идентификатор
Список формальных параметров состоит из одного или более параметров, разделенных запятыми, из которых только последний может быть массивом параметров.
В примере демонстрируются разные виды параметров.
public void M(
ref int i,
decimal d,
bool b = false,
bool? n = false,
string s = "Hello",
object o = null,
T t = default(T),
params int[] a
) { }
В списке_формальных_параметров для M, i является обязательным параметром, d является обязательным параметром по значению, b, s, o и t являются необязательными параметрами, и a является массивом параметров.
Вызов метода создает определенную для этого вызова копию формальных параметров и локальных переменных метода, а список аргументов вызова присваивает значения или ссылки на переменные вновь созданным формальным параметрам. Внутри блока метода к формальным параметрам можно обращаться по их идентификаторам в выражениях простого имени.
Есть четыре вида формальных параметров:
· параметры по значению, объявляемые без модификаторов;
· параметры по ссылке, объявляемые с модификатором ref;
· выходные параметры, объявляемые с модификатором out;
· массивы параметров, объявляемые с модификатором params.
Параметры по значению
Параметр, объявленный без модификаторов, является параметром по значению. Параметр по значению соответствует локальной переменной, получающей свое начальное значение из соответствующего аргумента, предоставленного во время вызова метода.
Если формальный параметр является параметром по значению, соответствующий аргумент в вызове метода должен быть выражением, неявно преобразуемым в тип формального параметра.
Параметры по ссылке
Параметр, объявленный с модификатором ref, является параметром по ссылке. В отличие от параметра по значению, параметр по ссылке не создает новое место хранения. Вместо этого параметр по ссылке представляет то же самое место хранения, что и переменная, заданная в качестве аргумента при вызове метода.
Если формальный параметр является параметром по ссылке, соответствующий аргумент в вызове метода должен состоять из зарезервированного слова ref, за которым следует ссылка на переменную того же типа, что и формальный параметр. Переменная должна быть определенно назначенной до того, как ее можно будет передать в качестве параметра по ссылке.
Внутри метода параметр по ссылке всегда считается определенно назначенным.
Выходные параметры
Параметр, объявленный с модификатором out, является выходным параметром. Подобно параметру по ссылке, выходной параметр не создает новое место хранения. Вместо этого выходной параметр представляет то же самое место хранения, что и переменная, заданная в качестве аргумента при вызове метода.
Если формальный параметр является выходным параметром, соответствующий аргумент в вызове метода должен состоять из зарезервированного слова out, за которым следует ссылка на переменную того же типа, что и формальный параметр. Переменной не требуется быть определенно назначенной, прежде чем ее можно будет передать в качестве выходного параметра, но вслед за вызовом, в котором переменная была передана в качестве выходного параметра, эта переменная считается определенно назначенной.
Внутри метода, точно так же, как и локальная переменная, выходной параметр вначале считается неназначенным, и должен быть определенно назначен до использования его значения.
Каждый выходной параметр метода должен быть определенно назначен до возврата из метода.
Примеры.
Дата: 2019-03-05, просмотров: 215.