Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp Language Specification.doc
Скачиваний:
13
Добавлен:
26.09.2019
Размер:
4.75 Mб
Скачать

1.6.6Методы

Метод — это член, реализующий вычисление или действие, которые могут выполняться объектом или классом. Доступ к статическим методам осуществляется через классы. Доступ к методам экземпляра осуществляется через экземпляры класса.

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

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

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

1.6.6.1Параметры

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

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

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

Параметр ссылки используется для передачи как входных, так и выходных параметров. Аргумент, передаваемый параметру ссылки, должен являться переменной. Во время выполнения метода параметр ссылки представляет то же место хранения, что и переменная аргумента. Параметр ссылки объявляется с помощью модификатора ref. В следующем примере показано использование параметров с модификатором ref.

using System;

class Test { static void Swap(ref int x, ref int y) { int temp = x; x = y; y = temp; }

static void Main() { int i = 1, j = 2; Swap(ref i, ref j); Console.WriteLine("{0} {1}", i, j); // Outputs "2 1" } }

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

using System;

class Test { static void Divide(int x, int y, out int result, out int remainder) { result = x / y; remainder = x % y; }

static void Main() { int res, rem; Divide(10, 3, out res, out rem); Console.WriteLine("{0} {1}", res, rem); // Outputs "3 1" } }

Массив-параметр используется для передачи методу переменного числа аргументов. Массив-параметр объявляется с помощью модификатора params. В качестве массива-параметра может использоваться только последний параметр метода. Массив-параметр должен являться одномерным массивом. Методы Write и WriteLine класса System.Console являются хорошими примерами использования массивов-параметров. Эти методы объявляются следующим образом.

public class Console { public static void Write(string fmt, params object[] args) {...}

public static void WriteLine(string fmt, params object[] args) {...}

... }

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

Console.WriteLine("x={0} y={1} z={2}", x, y, z);

равнозначен следующей записи:

string s = "x={0} y={1} z={2}"; object[] args = new object[3]; args[0] = x; args[1] = y; args[2] = z; Console.WriteLine(s, args);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]