Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Руководство_по_C#.doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
10 Мб
Скачать
☆

5.9.3Модификатор params

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

Число элементов массива параметров будет равно числу аргументов, передаваемых методу. А для получения аргументов в программе организуется доступ к данному массиву:

using System;

namespace ConsoleApplication1

{

class Program

{

static void MaxArr(ref int i, params int[] arr)

{

// Изначально нужно обязательно выполнить проверку

// на непустоту массива

if (arr.Length == 0)

{ Console.WriteLine("Пустой массив!"); i = 0;

return;

}

else

{

if (arr.Length == 1)

{ i = arr[0]; return; }

}

i = arr[0];

// Ищем максимум

for (int j = 1; j < arr.Length; j++)

if (arr[j] > i) i = arr[j];

}

static void Main()

{

int result = 0;

int[] arr1 = new int[8];

Random ran = new Random();

// Инициализируем массив случайными числами

for (int i = 0; i < 8; i++)

arr1[i] = ran.Next(1, 20);

Console.WriteLine("Массив arr1: \n");

foreach (int i in arr1)

Console.Write("{0}\t", i);

MaxArr(ref result, arr1);

Console.WriteLine("Максимум: {0}", result);

int k = 3;

Console.WriteLine("\nЧисла 2, 34, -89, 10, {0}",k);

MaxArr(ref result, 2, 34, k, -89, 10);

Console.WriteLine("Максимум: {0}", result);

Console.ReadKey();

}

}

}

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

5.10Необязательные и именованные аргументы

Такие аргументы можно использовать в языке версии 4.0 и выше.

5.10.1Необязательные аргументы

В версии C# 4.0 внедрено новое средство, повышающее удобство указания аргументов при вызове метода. Это средство называется необязательными аргументами и позволяет определить используемое по умолчанию значение для параметра метода. Данное значение будет использоваться по умолчанию в том случае, если для параметра не указан соответствующий аргумент при вызове метода. Следовательно, указывать аргумент для такого параметра не обязательно. Необязательные аргументы позволяют упростить вызов методов, где к некоторым параметрам применяются аргументы, выбираемые по умолчанию. Их можно также использовать в качестве "сокращенной" формы перегрузки методов.

Главным стимулом для добавления необязательных аргументов послужила необходимость в упрощении взаимодействия с объектами СОМ. В нескольких объектных моделях Microsoft (например, Microsoft Office) функциональность предоставляется через объекты СОМ, многие из которых были написаны давно и рассчитаны на использование необязательных параметров.

Пример использования необязательных аргументов показан ниже:

namespace ConsoleApplication1

{

class Program

{

// Аргументы b и с указывать при вызове необязательно

static int mySum(int a, int b = 5, int c = 10)

{ return a + b + c; }

static void Main()

{

int sum1 = mySum(3);

int sum2 = mySum(3,12);

Console.WriteLine("Sum1 = "+sum1);

Console.WriteLine("Sum2 = "+sum2);

}

}

}

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

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