Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИДПО_ИИИС / Лекция 6.docx
Скачиваний:
52
Добавлен:
19.05.2015
Размер:
126.8 Кб
Скачать

Модификаторы для параметров методов

Программист может поручить компилятору контроль за параметрами методов, обозначив одни как входные, другие - как выходные. Для таких целей в C# предусмотрен ряд модификаторов, перечисленных в таблице

Таблица 20.8 . Модификаторы для параметров методов C#

Проиллюстрируем прменение модификаторов на примере

using System;

namespace Test

{

class Test

{

//***************************************

public int Add(int x, int y)

{

return x + y;

}

//***************************************

public void Add(int x, int y, out int sum)

{

sum = x + y;

}

//***************************************

public void UpperCaseThisString(ref string str)

{

// Возвращает символьную строку с верхнем регистре

str = str.ToUpper();

}

//***************************************

public void DisplayArrayOfInt(string msg, params int[] list)

{

Console.Write(msg);

for(int i = 0; i < list.Length; i++)

Console.Write(" {0}", list[i]);// Вывод в строку

}

//***************************************

//***************************************

static void Main()

{

Test test = new Test();

Console.WriteLine("5 + 10 = {0}", test.Add(5, 10));

int sum; // Инициализировать необязательно - выходной

test.Add(50, 100,outsum);

Console.WriteLine("50 + 100 = {0}",sum);

string message = "\nПривет студентам!";

Console.WriteLine("Перед обработкой:{0}", message);

test.UpperCaseThisString(ref message);

Console.WriteLine("После обработки:{0}", message);

int[] arrayInt = new int[3]{1, 2, 3};

test.DisplayArrayOfInt("Вывод из массива целых:",

arrayInt);

test.DisplayArrayOfInt("\nВывод списка из трех целых:",

11, 22, 33);

test.DisplayArrayOfInt("\nВывод списка из пяти целых:",

55, 66, 77, 88, 99);

while(true);

}

}

}

Листинг 20.38 . Применение модификаторов параметров методов

Результат примера

5 + 10 = 15

50 + 100 = 150

Перед обработкой:

Привет студентам!

После обработки:

ПРИВЕТ СТУДЕНТАМ!

Вывод из массива целых: 1 2 3

Вывод списка из трех целых: 11 22 33

Вывод списка из пяти целых: 55 66 77 88 99

Отметьте для себя, что модификаторы out и ref должны применяться и в определении метода и в его вызове, т.е. как при описании формальных параметров, так и фактических.

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

using System;

namespace Test

{

class Person

{

private string Name;

private int Age;

//***************************************

// Конструктор

public Person(string name, int age)

{

Name = name;

Age = age;

}

//***************************************

// Конструктор по умолчанию

public Person(){}

//***************************************

public void PrintInfo()

{

Console.WriteLine("Имя={0}; Возраст={1}", Name, Age);

}

}

//****************************************************************

class Test

{

//***************************************

// Что же мне пришлют на этот раз?

public void DisplayArrayOfObject(params object[] list)

{

for(int i = 0; i < list.Length; i++)

{

// Относится ли текущий объект из переданного

// массива объектов к классу Person?

if(list[i] is Person)

((Person)list[i]).PrintInfo();

else

Console.WriteLine(list[i]);

}

}

//***************************************

static void Main()

{

// Создали объект только

// для того, чтобы вызвать его метод

Test test = new Test();

// Создаем сотрудника

Person person = new Person("Студент

Вильгельм И.А.", 21);

// Передаем сотрудника и другие разнотипные объекты в нужном

// количестве методу, объявленному с модификатором params

test.DisplayArrayOfObject(

"Переменное число параметров любого типа",

"T 001 TT",

12345,

person,

Math.PI,

true,

"Привет студентам",

"..................... и т.д.");

while(true);

}

}

}

Листинг 20.39 . Передача методу произвольных параметров

Результат примера

Переменное число параметров любого типа

T 001 TT

12345

Имя=Студент Вильгельм И.А.; Возраст=21

3,14159265358979

True

Привет студентам

..................... и т.д.

В языке C# нет операций адресации и разадресации & и *, как это имеет место быть в C и C++. Вся передача обеспечивается использованием ссылок с явным или неявным использованием модификатора ref.

Соседние файлы в папке ИДПО_ИИИС