В данном примере в методеSwap выполняется смена объектов, на которые ссылаются два его аргумента. До вызова методаSwap аргумент х ссылается на объект, содержащий значения 1 и 2, тогда как аргументуссылается на объект, содержащий значения 3 и 4. А после вызова методаSwap аргумент х ссылается на объект, содержащий значения 3 и 4, тогда как аргументуссылается на объект, содержащий значения 1 и 2. Если бы не параметры типаref,то перестановка в методеSwap не имела бы никаких последствий за пределами этого метода. Для того чтобы убедиться в этом, исключите параметры типаrefиз методаSwap .
Использование переменного числа аргументов
При создании метода обычно заранее известно число аргументов, которые будут переданы ему, но так бывает не всегда. Иногда возникает потребность создать метод, которому можно было бы передать произвольное число аргументов. Допустим, что требуется метод, обнаруживающий наименьшее среди ряда значений. Такому методу можно было бы передать не менее двух, трех, четырех или еще больше значений. Но в любом случае метод доАжен возвратить наименьшее из этих значений. Такой метод нельзя создать, используя обычные параметры. Вместо этого придется воспользоваться специальным типом параметра, обозначающим произвольное число параметров. И это делается с помощью создаваемого параметра типаparams.
Для объявления массива параметров, способного принимать от нуля до нескольких аргументов, служит модификаторparams.Число элементов массива параметров будет равно числу аргументов, передаваемых методу. А для получения аргументов в программе организуется доступ к данному массиву.
Ниже приведен пример программы, в которой модификаторparamsиспользуется для создания методаMinVal , возвращающего наименьшее среди ряда заданных значений.
// Продемонстрировать применение модификатора params.*
using System;
class Min {
public int MinVal(params int[] nums) { int m;
if(nums.Length ==0) {
Console.WriteLine("Ошибка: нет аргументов."); return 0;
}
m = nums[0];
for(int i=l; i < nums.Length; i++) » if(nums[i] < m) m = nums[i];
return m;
}
}
class ParamsDemo { static void Main {
Min ob = new Min; int min;
int a = 10, b = 20;
// Вызвать метод с двумя значениями, min = ob.MinVal(a, b);
Console.WriteLine("Наименьшее значение равно " + min);
// Вызвать метод с тремя значениями, min = ob.MinVal(a, b, -1);
Console.WriteLine("Наименьшее значение равно " + min);
Console.WriteLine("Наименьшее значение равно " + min);