- •Windows-проект на языке с#
- •Константы
- •Организация консольного ввода-вывода в c#
- •Методы классов в c#
- •Модификаторы для параметров методов
- •Массивы в c#
- •Одномерные массивы
- •Многомерные массивы
- •Базовый класс System.Array
- •Работа со строками в c#
- •Управляющие последовательности и вывод служебных символов
Модификаторы для параметров методов
Программист может поручить компилятору контроль за параметрами методов, обозначив одни как входные, другие - как выходные. Для таких целей в 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.