Главное требование при передаче параметров состоит в том, что аргументы при вызове метода должны записываться в том же порядке, что и в заголовке метода, и должно существовать неявное преобразование типа каждого аргумента к типу соответствующего параметра.
Количество аргументов должно соответствовать количеству параметров. На имена никаких ограничений не накладывается: имена аргументов могут как совпадать, так и не совпадать с именами параметров.
Существуют два способа передачи параметров: по значению и по ссылке.
При передаче по значению метод получает копии значений аргументов, и операторы метода работают с этими копиями. Доступа к исходным значениям аргументов у метода нет, а следовательно, нет и возможности их изменить.
При передаче по ссылке (по адресу) метод получает копии адресов аргументов, он осуществляет доступ к ячейкам памяти по этим адресам и может изменять исходные значения аргументов, модифицируя параметры.
В С# для обмена данными между вызывающей и вызываемой функциями предусмотрено четыре типа параметров:
|
|
□ параметры-значения;
□ параметры-ссылки — описываются с помощью ключевого слова ref;
□ выходные параметры — описываются с помощью ключевого слова out;
□ параметры-массивы — описываются с помощью ключевого слова params.
Ключевое слово предшествует описанию типа параметра. Если оно опущено, параметр считается параметром-значением. Параметр-массив может быть только один и должен располагаться последним в списке, например:
public int Calculate(int a, ref int b, out int c, params int[] d)...
О параметрах-массивах мы будем говорить позже, в главе 7 (см. с. 154), а сейчас рассмотрим остальные типы параметров.