Similar presentations:
Методы в С#. Основные понятия
1.
14. Методы в С#Основные понятия
2.
Пример. Вывести на экран следующий текст:Привет Андрей! Привет Мария! Привет Семен!
Привет Ярослав!
static void Main(string[] args)
{
Console.WriteLine("Привет Андрей!");
Console.WriteLine("Привет Мария!");
Console.WriteLine("Привет Семен!");
Console.WriteLine("Привет Ярослав!");
}
3.
Подпрограммы• Во всех языках программирования есть
возможность оформлять часть
программного кода в виде подпрограмм.
• Подпрограмма – это относительно
самостоятельный фрагмент программы
(блок), оформленный особым образом и
имеющий имя.
• Упоминание этого имени в программе
называется вызовом подпрограммы.
4.
Назначение подпрограммПодпрограммы позволяют:
Выполнять один и тот же программный код при
различных значениях входящих в него переменных
– параметров, открывают возможность повторного
использования однажды созданного кода и
способствуют появлению библиотеки подпрограмм.
Реализовать метод нисходящего проектирования
программ (метод сверху-вниз), при котором
программа разбивается на отдельные блоки –
модули, каждый из которых выполняет некоторый
логически завершенный этап обработки данных, а
потом из этих блоков собирается программа.
5.
Метод – это подпрограмма, фрагмент кода, написанногоодин раз, но который может использоваться многократно
В языке С# нет специальных ключевых слов –
procedure и function, но присутствуют сами
эти понятия. Синтаксис объявления метода
позволяет однозначно определить, чем
является метод – процедурой или функцией.
Синтаксис описания метода:
[модификаторы] тип имя ([параметры])
{ тело метода }
Модификаторы и параметры необязательны.
6.
Модификаторы доступа7.
Если модификатор доступа опущен, то поумолчанию предполагается, что он имеет
значение private и метод является
закрытым для клиентов и потомков
класса.
Обязательным при описании заголовка
является указание типа результата,
имени метода и круглых скобок, наличие
которых необходимо и в том случае,
если сам список формальных аргументов
отсутствует.
Тело метода заключается в фигурные
скобки.
8.
Примеры описания методовvoid A()
{
// тело метода
};
int B()
{
// тело метода
};
public void C()
{
// тело метода
};
Методы A и B являются закрытыми, а метод С открыт. Методы A и С реализованы процедурами, а
метод B - функцией, возвращающей целое значение.
Примечание: Всегда старайтесь делать код
как можно более кратким – чем короче
программа, тем умнее программист.
9.
Тип результата методаФормально тип результата метода указывается
всегда, значение void однозначно
определяет, что метод реализуется
процедурой. Тип результата, отличный от
void, указывает на функцию. В теле функции
обязательно указывается оператор return
(возврат), который присваивает функции
нужное значение. Если метод представляет
собой процедуру, то в нем нельзя указывать
оператор return.
10.
Ключевое слово staticМетоды могут быть объявлены как статические
– с использованием ключевого слова static
Это значит, что статический метод может быть
вызван напрямую через уровень класса, без
необходимости создавать хотя бы один
экземпляр объекта данного класса.
По этой причине метод Main() всегда
объявляется как static – чтобы этот метод мог
начать выполняться еще до создания первого
экземпляра класса, в котором он определен.
11.
Вызов методаЧтобы использовать методы в программе, надо
вызвать их в методе Main. Для вызова метода
указывается его имя, после которого в скобках идут
значения для его параметров (если метод принимает
параметры).
название_метода (значения_параметров_метода);
static void hello()
{
Console.WriteLine("hello");
}
static void Main(string[] args)
{
hello();
Console.ReadLine();
}
12.
Пример. Вывести на экран следующий текст:Привет Андрей!
Привет
Мария!
Привет
Семен!
Привет
Ярослав!
Реализация метода с помощью процедуры
static void SayHello(string someName)
{
Console.WriteLine("Привет " + someName + "!");
}
static void Main(string[] args)
{
SayHello("Андрей"); // вызов метода
SayHello("Мария"); // вызов метода
SayHello("Семен"); // вызов метода
SayHello("Ярослав"); // вызов метода
}
13.
Пример. Вывести на экран следующий текст:Привет Андрей!
Привет
Мария!
Привет
Семен!
Привет
Ярослав!
Реализация метода с помощью функции
static string Privet(string someName)
{
return "Привет " + someName + "!";
}
static void Main(string[] args)
{
Console.WriteLine(Privet("Андрей"));
Console.WriteLine(Privet("Мария"));
Console.WriteLine(Privet("Семен"));
Console.WriteLine(Privet("Ярослав"));
}
14.
Выход из методаstatic string Privet(string someName)
Инструкция,
{
которая никогда
не выполнится
return "Привет " + someName + "!";
Console.WriteLine("ПРИВЕТ, ПРИВЕТ!");
}
static void Main(string[] args)
{
Console.WriteLine(Privet("Андрей"));
}
15.
15. Параметры в методах16.
Параметры методаПараметры позволяют передать в метод некоторые
входные данные. Например, имена Андрей, Мария,
Семен, Ярослав в приведенных выше примерах (в
метод передается один параметр типа string).
Значения, которые передаются параметрам, еще
называются аргументами. Иногда можно встретить
такие определения как формальные
параметры и фактические параметры. Формальные
параметры – это собственно параметры метода (в
данном случае someName), а фактические параметры –
значения, которые передаются формальным
параметрам. То есть фактические параметры – это и
есть аргументы метода.
17.
Пример. Напишем метод max2(), которыйпринимает два числа и возвращает
максимальное из них
static int max2(int a, int b)
{
if (a > b) return a;
else return b;
}
static void Main(string[] args)
{
Console.WriteLine(max2(4,3));
Console.WriteLine(max2(7, -1));
Console.WriteLine(max2(int.Parse(Console.ReadLine()),
int.Parse(Console.ReadLine())));
}
18.
Теперь можно написать метод max3(), которыйпринимает три числа и возвращает
При передаче значений
максимальное их них.
static int max2(int a, int b) параметрам важно
учитывать тип
{
параметров: между
if (a > b) return a;
аргументами и
else return b;
параметрами должно
}
быть соответствие по типу
static int max3(int a, int b, int c)
{
return max2(max2(a, b), c);
}
static void Main(string[] args)
{
Console.WriteLine(max3(-3,4,3));
}
19.
Необязательные параметрыПо умолчанию при вызове метода необходимо
предоставить значения для всех его параметров. Но C#
также позволяет использовать необязательные параметры.
Для таких параметров необходимо объявить значение по
умолчанию. Также следует учитывать, что после
необязательных параметров все последующие параметры
также должны быть необязательными:
static int sum(int x, int y, int z=5, int s=4)
{
return x + y + z + s;
}
Так как последние два параметра объявлены как
необязательные, то мы можем один из них или оба
опустить:
sum(2, 3); //14
sum(2,3,10); //19
20.
Именованные параметрыВ предыдущих примерах при вызове методов
значения для параметров передавались в
порядке объявления этих параметров в методе.
Но мы можем нарушить подобный порядок,
используя именованные параметры:
sum(x:2, y:3);
sum(y:2,x:3,s:10);
//Необязательный параметр z использует
значение по умолчанию
21.
Передача параметров по значениюи ссылке
Передача параметров по значению
Наиболее простой способ передачи параметров
представляет передача по значению, по сути это
обычный способ передачи параметров:
static void Main(string[] args)
{
Console.WriteLine(sum(2.3,3.5));//5,8
Console.ReadKey();
}
static double sum(double a, double b)
{
return a + b;
}
22.
Передача параметров по значениюи ссылке
Передача параметров по ссылке и
модификатор ref
static void Main(string[] args)
{
double x = 2.3, y = 3.5;
sum(ref x, y);
Console.WriteLine("x={0}, y={1}",x,y);
Console.ReadKey();
}
static void sum(ref double a, double b)
{
a+= b;
}
23.
Сравнение передачи по значению и по ссылкеВ чем отличие двух способов передачи
параметров? При передаче по значению
метод получает не саму переменную, а
ее копию. А при передаче параметра по
ссылке метод получает адрес переменной
в памяти. И, таким образом, если в
методе изменяется значение параметра,
передаваемого по ссылке, то также
изменяется и значение переменной,
которая передается на его место.
24.
Пример. Передача параметров по значениюstatic void Main(string[] args)
{
int a = 5;
Console.WriteLine("Начальное значение
переменной a = " + a);
IncrementVal(a);
Console.WriteLine("Переменная a после
передачи по значению равна = " + a);
}
static void IncrementVal(int x)
{
x++;
Console.WriteLine("IncrementVal: " + x);
}
25.
Пример. Передача параметров по ссылкеstatic void Main(string[] args)
{
int a = 5;
Console.WriteLine("Начальное значение
переменной a = " + a);
IncrementRef(ref a);
Console.WriteLine("Переменная a после
передачи ссылке равна = " + a);
}
static void IncrementRef(ref int x)
{
x++;
Console.WriteLine("IncrementRef: " + x);
}
26.
Выходные параметрыМодификатор out
Результат
возвращается не
static void Main(string[] args) через оператор return,
а через выходной
{
double x = 2.3, y = 3.5, s; параметр.
Преимущество в том,
sum(x,y,out s);
что из метода можно
Console.WriteLine("s="+s);
вернуть больше
Console.ReadKey();
одного значения
}
static void sum(double a, double b, out double sum)
{
sum = a+ b;
}
27.
Входные параметрыМодификатор in
Модификатор in указывает, что данный параметр будет
передаваться в метод по ссылке, однако внутри метода
его значение параметра нельзя будет изменить.
static void Main(string[] args)
{
int x = 2, y = 3, s;
sum(in x, y, out s);
Console.WriteLine("s="+s);
Console.ReadKey();
}
static void sum(in int a, int b, out int sum)
{
sum = a + b;
}
28.
Локальные и глобальные переменныеА – основная
программа
B, C, D, E –
подпрограммы.
Переменные,
описанные в А,
являются
глобальными по
отношению ко всем
подпрограммам.
Переменные, описанные в С, являются
глобальными по отношению к D и т.д.
29.
Область видимостиКаждая переменная доступна в рамках определенного
контекста или области видимости. Вне этого
контекста переменная уже не существует.
Существуют различные контексты:
Контекст класса. Переменные, определенные на
уровне класса, доступны в любом методе этого класса
Контекст метода. Переменные, определенные на
уровне метода, являются локальными и доступны
только в рамках данного метода. В других методах
они недоступны
Контекст блока кода. Переменные, определенные на
уровне блока кода, также являются локальными и
доступны только в рамках данного блока. Вне своего
блока кода они не доступны.
30.
class Program // начало контекста классаПример
{
static int a = 9; // переменная уровня класса
static void Main(string[] args) // начало контекста
метода Main
{
int b = a - 1; // переменная уровня метода
{ // начало контекста блока кода
int c = b - 1; // переменная уровня блока
кода
} // конец контекста блока кода, переменная с
уничтожается
} // конец контекста метода Main, переменная b
уничтожается
} // конец контекста класса, переменная a
уничтожается
31.
Работа с консольным окномДля работы с консольным окном используется
класс Console. Класс Console обладает свойствами,
которые позволяют управлять консолью.
Некоторые из них:
BackgroundColor − цвет фона консоли;
ForegroundColor − цвет шрифта консоли;
Title − заголовок консоли.
32.
Работа с консольным окномДля взаимодействия с консолью можно также
использовать методы:
Clear − очистка консоли;
ResetColor − Устанавливает для цветов фона и
текста консоли их значения по умолчанию;
SetCursorPosition − Устанавливает положение
курсора;
SetWindowSize − Устанавливает заданные
значения высоты и ширины окна консоли;
33.
Работа с консольным окномЗадать цвет можно с помощью конструкции
(перечисления) ConsoleColor.
где цвет может быть выбран из таблицы
Black
Blue
Cyan
Red
Yellow
Gray
Green
White
Черный
Синий
Бирюзовый
Красный
Желтый
Серый
Зеленый
Белый
34.
Пример 1. Составить программу, выводящую на экран четырегоризонтальные линии символов «*»:
1 линия: 7 символов, 2 линия: 19 символов, 3 и 4 линии:
любое количество символов (< 80, вводить с клавиатуры)
В результате работы программы на экране должны
появиться следующие линии:
*******// всего 7
*******************// всего 19
***…***// всего k
***…***// всего m
В этой задаче 4 раза повторяются одинаковые
действия, а именно, вывод строки из «*», но
количество «*» в каждом случае различно. Вывод n
звездочек на экран можно организовать в цикле с
параметром, повторяющимся n раз, и в теле цикла на
экран будет выводиться одна звездочка при помощи
метода Write(“*”).
35.
static void zvezd(int n){
for (int i = 0; i < n; i++)
Console.Write("*");
Console.WriteLine();
}
static void Main(string[] args)
{
Console.SetWindowSize(60, 20);
Console.BackgroundColor = ConsoleColor. Yellow;
Console.ForegroundColor = ConsoleColor. Blue;
Console.Clear();
Console.WriteLine("Введите значение k (от 0 до 80):");
byte k = Convert.ToByte(Console.ReadLine());
Console.WriteLine("Введите значение m (от 0 до 80):");
byte m = Convert.ToByte(Console.ReadLine());
zvezd(7); // первый вызов метода
zvezd(19); // второй вызов метода
zvezd(k); // третий вызов метода
zvezd(m); // четвертый вызов метода
}
36.
Пример 2. Составить программу рисования изображения//горизонтальная линия
static void line1(int x, int y, int n)
{
Console.SetCursorPosition(x, y);
for (int i = 0; i < n; i++)
Console.Write("*");
}
//вертикальная линия
static void line2(int x, int y, int n)
{
for (int i = 0; i < n; i++)
{
Console.SetCursorPosition(x, y+i);
Console.Write("*");
}
}
37.
static void Main(string[] args){
Console.SetWindowSize(60, 20);
Console.BackgroundColor = ConsoleColor.Cyan;
Console.ForegroundColor = ConsoleColor.Red;
Console.Clear();
line1(18,6,1); line1(17, 7, 3);
line1(13, 8, 11); line1(12, 9, 13);
line1(10, 10, 17); line1(10, 11, 1);
line1(15, 11, 1); line1(21, 11, 1);
line1(27, 11, 1); line2(18, 11, 6);
line1(19, 16, 3); line2(21, 15, 1);
Console.ReadLine();
}
38.
Пример 3. Составить программу вычисления значенияфункции
static double f(int x, int y)
{
return (x+Math.Sin(x))/(Math.Sin(y)+y);
}
static void Main(string[] args)
{
double s = f(2, 5)+f(6, 3)+f(1, 4);
Console.WriteLine("s={0:f2}",s);
Console.ReadLine();
}
39.
Пример 4. Написать метод для обмена значений двухпеременных
static void Obmen(ref int x1, ref int y1)
{
int t = x1;
x1 = y1;
y1 = t;
}
static void Main(string[] args)
{
int x = 10, y=5;
Obmen(ref x, ref y);
Console.WriteLine("{0},{1}",x,y);
}
40.
Пример 5. Написать метод для нахожденияминимума из двух переменных
static void Min(ref int x2, ref int y2)
{
if (x2 > y2) Obmen(ref x2, ref y2);
}
static void Main(string[] args)
{
int x = 10, y=5;
Min(ref x, ref y);
Console.WriteLine("{0},{1}",x,y);
}