Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы ООП не все.docx
Скачиваний:
9
Добавлен:
22.09.2019
Размер:
225 Кб
Скачать
☆

Вопрос 2 Методы. Синтаксический блок. Ссылочные параметры ref и out

Типы С# можно разделить на типы-значения и ссылоч­ные типы. Когда методу передается значение ссылочного типа, все изменения в преде­лах метода отражаются и на исходной переменной. Если же аргументом метода является переменная типа-значения, она копируется в формальный параметр. В результате исходная переменная и переменная в методе явля­ются разными, никак не связанными величинами. До сих пор подобные свойства редко использовались, поскольку любое вычисленное методом значение возвращалось в точку вызова. Но как быть, если требуется возвращать несколь­ко значений? Здесь уже нельзя воспользоваться возвращаемым значением (поскольку так можно возвратить только одну переменную). Дня решения этой проблемы предназ­начены ссылочные параметры, которые объявляются с ключевым словом ref

public static void Swap(ref int a, ref int b)

Данный заголовок метода указывает, что а и b являются ссылочными параметрами. Вызов метода также должен содержать ключевое слово ref, например:

Swap(ref Value_1, ref Value_2)

Несоблюдение этого правила вызывает сообщение об ошибке на этапе компиляции.

OUT

Любой аргумент, передаваемый как ссылочный параметр, должен поддерживать присва­ивание значения (т.е. он не может быть, к примеру, Константой). Swap(ref 10, ref 20) так как числу 10 или 20 нельзя присвоить значение.

Следует отметить, что официальная терминология С# делает различие между функциями и методами. Согласно этой терминологии, понятие "функция-член" включает не только методы, но также другие члены, не являющиеся данными, класса или структуры. Сюда входят индексаторы, операции, конструкторы, деструкторы, а также — возможно, несколько неожиданно — свойства. Они контрастируют с данными-членами: полями, константами и событиями.

Объявление методов

В С# определение метода состоит из любых модификаторов (таких как спецификация доступности), типа возвращаемого значения, за которым следует имя метода, затем списка аргументов в круглых скобках и далее — тела метода в фигурных скобках:

[модификаторы] тип_возврата ИмяМетода([параметры])

{

// Тело метода

}

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

Если метод не возвращает ничего, то в качестве типа возврата указывается void, поскольку вообще опустить тип возврата невозможно. Если же он не принимает аргументов, то все равно после имени метода должны присутствовать пустые круглые скобки. При этом включать в тело метода оператор возврата не обязательно — метод возвращает управление автоматически по достижении закрывающей фигурной скобки.

Возврат из метода и возврат значения

В целом, возврат из метода может произойти при двух условиях. Во-первых, когда встречается фигурная скобка, закрывающая тело метода. И во-вторых, когда выполняется оператор return. Имеются две формы оператора return: одна — для методов типа void (возврат из метода), т.е. тех методов, которые не возвращают значения, а другая — для методов, возвращающих конкретные значения (возврат значения).