min = ob.MinVal(1, 2.2); // Неверно!
считается недопустимым, поскольку нельзя автоматически преобразовать тип double
(значение 2.2) в тип int,
указанный для массива nums
в методе MinVal().
Пользоваться модификатором params
следует осторожно, соблюдая граничные условия, так как параметр типа params
может принимать любое число аргументов — даже нулевое ! Например, вызов метода MinVal()
в приведенном ниже фрагменте кода считается правильным с точки зрения синтаксиса С#.
min = ob.MinVal(); // нет аргументов
min = ob.MinVal(3); // 1 аргумент
Именно поэтому в методе MinVal()
организована проверка на наличие в массиве nums
хотя бы одного элемента перед тем, как пытаться получить доступ к этому элементу. Если бы такой проверки не было, то при вызове метода MinVal()
без аргументов возникла бы исключительная ситуация во время выполнения. (Подробнее об исключительных ситуациях речь пойдет в главе 13.) Больше того, код метода MinVal()
написан таким образом, чтобы его можно было вызывать с одним аргументом. В этом случае возвращается этот единственный аргумент.
У метода могут быть как обычные параметры, так и параметр переменной длины. В качестве примера ниже приведена программа, в которой метод ShowArgs()
принимает один параметр типа string
, а также целочисленный массив в качестве параметра типа params
.
// Использовать обычный параметр вместе с параметром
// переменной длины типа params.
using System;
class MyClass {
public void ShowArgs(string msg, params int[] nums) {
Console.Write(msg + ": ");
foreach(int i in nums)
Console.Write (i + " ") ;
Console.WriteLine();
}
}
class ParamsDemo2 {
static void Main() {
MyClass ob = new MyClass();
ob.ShowArgs("Это ряд целых чисел",
1, 2, 3, 4, 5);
ob.ShowArgs("А это еще два целых числа ",
17, 20);
}
}
Вот какой результат дает выполнение этой программы.
Это ряд целых чисел: 1, 2, 3, 4, 5
А это еще два целых числа: 17, 20
В тех случаях, когда у метода имеются обычные параметры, а также параметр переменной длины типа params
, он должен быть указан последним в списке параметров данного метода. Но в любом случае параметр типа params
должен быть единственным.
Возврат объектов из методов
Метод может возвратить данные любого типа, в том числе и тип класса. Ниже в качестве примера приведен вариант класса Rect
, содержащий метод Enlarge(),
в котором строится прямоугольник с теми же сторонами, что и у вызывающего объекта прямоугольника, но пропорционально увеличенными на указанный коэффициент.
// Возвратить объект из метода.
using System;
class Rect {
int width;
int height;
public Rect(int w, int h) {
width = w;
height = h;
}
public int Area() {
return width * height;
}
public void Show() {
Console.WriteLine(width + " " + height);
}
/* Метод возвращает прямоугольник со сторонами, пропорционально увеличенными на указанный коэффициент по сравнению с вызывающим объектом прямоугольника. */
public Rect Enlarge(int factor) {
return new Rect(width * factor, height * factor);
}
}
class RetObj {
static void Main() {
Rect rl = new Rect(4, 5);
Console.Write("Размеры прямоугольника rl: ");
rl.Show();
Console.WriteLine("Площадь прямоугольника rl: " + rl.Area());
Console.WriteLine();
// Создать прямоугольник в два раза больший прямоугольника rl.
Rect r2 = rl.Enlarge(2);
Console.Write("Размеры прямоугольника r2: "); r2.Show();
Console.WriteLine("Площадь прямоугольника r2: " + r2.Area());
}
}
Выполнение этой программы дает следующий результат.
Размеры прямоугольника r1: 4 5
Площадь прямоугольника r1: 20
Размеры прямоугольника г2: 8 10
Площадь прямоугольника г2: 80
Читать дальше