SlideShare une entreprise Scribd logo
1  sur  45
Курс по програмиране на C#
Занятие №4
Функции и методи. Често използвани методи

2013
Съдържание 1/2
• Функции и методи
–
–
–
–
–

Контрол на изпълнението
Видимост на променливите
Методи без връщана стойност
Методи с връщана стойност
Ограничения

• Параметри
– Референтни параметри
– Изходящи параметри
– Масиви от параметри
Съдържание 2/2
• Аргументи
– Незадължителни аргументи
– Именувани аргументи

• Презаписване на методи
• Често използвани методи
–
–
–
–
–
–

Символни низове
Превръщане на данни
Работа с файлове
Работа с масиви
Работа с конзола
Други методи
Функции и методи
• Какво е „функция“? Какво е „метод“?
– Функция е подпрограма, която извършва конкретна дейност и
може да бъде извиквана от друга част от програмата
– Функциите могат да приемат един или повече параметри
– Функциите могат да връщат единична стойност като резултат
– Аргумент е стойността подавана на даден параметър
– Метод е функция дефинирана в рамките на клас или структура
– Процедури наричаме функции, които не връщат резултат
– В езика C# методът е единственият начин за дефиниране на
функции
Функции и методи
• Приложение на функциите
–
–
–
–

Разбиване на приложението на по-конкретни задачи
Преизползване на програмния код
Разделяне на отговорностите и по-добра поддръжка
Подобрена разбираемост на кода

• BCL представлява библиотека от методи подпомагащи
разработчика в създаването на приложения без това да
става от нулата
Функции и методи
• Характеристики на методите
–
–
–
–

Наименование
Брой и тип на параметрите
Връщана стойност
Клас, в който методът е дефиниран

• Сигнатура на метод
– Наименование
– Ред, вид и тип на параметрите

• Наименованието на метода трябва да отразява неговото
предназначение
• В един и същи клас не може да има повече от един метод с
една и съща сигнатура
Функции и методи
• Деклариране на методи
– Тип на данните на връщаната
стойност (или “void” ако няма
такава)
– Наименование
– Описание на параметрите
– Тяло на метода

// метод без параметри и резултат
void Run()
{
// prison break
}
// метод с параметър без резултат
void Notify(string message)
{
// изпраща уведомления по e-mail
}
// метод с два параметъра и резултат
int Sum(int a, int b)
{
int c = a + b;
return c;
}
Функции и методи
• Използване на методи
– Наименование на клас или
обект, ако методът е
деклариран в друг клас
– Наименованието на метода
– Списък от аргументи

// извикване на метод без параметър
// (след атомна бомба - нищо)
DropNuclearBomb();
// извикване на метод с параметър
// (или „да изчезнеш за 60 секунди“)
SetBombTimer(60);
// извикване на метод с няколко
// параметъра
PlantBomb(here, “Ahmet”);
// използване на резултат
int sum = Sum(a, b);
// префиксиране с наименование на клас
Console.WriteLine(“Kaboom!”);
Контрол на изпълнението
• Изпълнението на метод започва при неговото извикване
• Изпълнението на метод приключва:
– при достигане на края му
– при достигане на ключовата дума „return”
– при възникване на грешка

• След изпълнение на метод, изпълнението продължава от
мястото, на което е бил извикан
Видимост на променливите
• Локални променливи за един
метод са тези декларирани в
неговото тяло
• В тялото на един метод не
могат да бъдат декларирани
повече от една променливи с
едно и също наименование
• Локалните променливи не
могат да бъдат достъпвани
извън метода
• Параметрите имат статут на
локални променливи

void GimmeFive()
{
// локална променлива “five”
int five = 5;
// използване на локална променлива
Console.WriteLine(“Hi {0}!”, five);
// къде отиваш ти, може би?!
string five = “Five”;
}
Console.WriteLine(five); // Ко?! Не!
Методи без връщана стойност
• Когато методът не връща
резултат, изпълнението
приключва:
– при достигане на края му
– при достигане на ключовата
дума “return”
– при възникване на грешка

void DoSomethingNerd(WeatherInfo info)
{
// ако времето не е хубаво…
if (!IsWeatherFine(info))
return;
// да порешаваме задачи!
SolveSomeMathsProblems();
}
Методи с връщана стойност
• Когато методът връща
резултат, изпълнението
приключва:
– при използване на ключовата
дума „return” следвана от израз
– при възникване на грешка

• След ключовата дума „return”
задължително трябва да има
израз, който връща стойност
от същия тип, като резултата
от метода

int Sum(int a, int b)
{
int c = a + b;
// Назад, назад, моме, Калино!
return c;
}
// взима дискриминантата на кв. у-е
double GetDiscriminant(
double a, double b, double c)
{
return b * b – 4 * a * c;
}
Методи връщащи стойност
• Извиквания към методи
връщащи стойност могат да
бъдат използвани в изрази
– В изрази извикването на метода
се заменя със стойността на
върнатия от него резултат

// имаме триъгълник със страни…
double a = 5, b = 3, c = 2;
// забравете, че сте видели това:
double s = Math.Sqrt(
GetSemiperimeter(a, b, c)
* (GetSemiperimeter(a, b, c) – a)
* (GetSemiperimeter(a, b, c) – b)
* (GetSemiperimeter(a, b, c) – c));
// по-добре го напишете така:
double p = GetSemiperimeter(a, b, c);
s = Math.Sqrt(p*(p-a)*(p-b)*(p-c));
// накрая, разбира се:
Console.WriteLine(”Лицето е {0}.”, s);
Параметри
• Параметър от стойностен тип
– Параметърът взима стойността
от съответния аргумент
– При изпълнение на
метода, стойността на
аргумента се запазва

// параметър от стойностен тип
void CountBackwards(int n)
{
for (; n > 0; n--)
Console.WriteLine(n);
}
// променлива от стойностен тип
int n = 100;
// използване на стойностен аргумент
CountBackwards(n);
// какво ще изпише тук?
Console.WriteLine(n);
Параметри
• Параметър от референтен
тип
– Параметърът взима
референцията от съответния
аргумент
– При изпълнение на
метода, референциите на
аргумента се запазват, но не
винаги и съхранените зад тях
данни

// масивите са от референтен тип
int[] arr = new [] { 1, 3, 2, 10, 0 };
// извикваме метод за сортиране
Array.Sort(arr);
// след извикването, масивът си е
// останал на същото място в паметта,
// но пък сортиран
Параметри
• Параметър от референтен
тип
– Да си припомним Иванчо!

• Но по-подробно с Иванчо и
други (референтни) типове
ще се запознаем по-късно в
курса

// правим си „референтно“ хлапе Иванчо
Person kid = new Person(“Иванчо”);
// Иванчо е слушал и отива да си играе
Play(kid);// Иванчо скача на въже…
// … и чупи два шийни прешлена
// Но, въпреки това, той е същият
// Иванчо, който е отишъл да си играе…
ShowCervicalVertebrae(kid);
// … просто явно е останал с пет
// функциониращи шийни прешлена
Функции и методи - демо
// демонстрация
Ограничения
• Методите могат да връщат
само една стойност
• Ако искаме да върнем
повече?!
–
–
–
–
–

масиви
структури
обекти
референтни параметри
изходящи параметри

// методът ни връща масив
string[] GetCourseInfo()
{
return new[]
{
// наименование на курса
“Курс по програмиране на C#”,
// наименование на организацията
“ДАВИД академия”,
};
}
string[] info = GetCourseInfo();
Console.WriteLine(
“Курс: {0}; Организация: {1}”,
info[0], info[1]);
// … и сега добавете годината! 
Референтни параметри
• Позволяват предаването на
аргументите по
референция, а не по
стойност
• Възможност за промяна на
аргумента в извиквания метод
• Възможност за връщане на
повече от една стойност чрез
използване на няколко
аргумента
• Декларират се с поставяне на
ключовата дума „ref” пред
дефиницията на параметъра

// деклариране
void GetCourseInfo(ref string course,
ref string organisation,
ref int year)
{
course = “Програмиране на C#”;
organisation = “ДАВИД академия”;
}
Референтни параметри
• Използват се с поставяне на
ключовата дума „ref” пред
аргумента
• Аргументът трябва да е
предварително декларирана
променлива от същия тип
• Аргументът трябва да има
предварително присвоена
стойност
• Извикването не гарантира, че
в метода ще се присвои
стойност на аргумента

// деклариране
void GetCourseInfo(ref string course,
ref string organisation,
ref int year)
{
course = “Програмиране на C#”;
organisation = “ДАВИД академия”;
}
// използване
string courseName = null;
string organisationName = null;
int year = 2013;
GetCourseInfo(ref courseName,
ref organisationName,
ref year);
Изходни параметри
• Позволяват връщането на
стойност в подаден (изходен)
параметър
• Задължителна промяна на
аргумента в извиквания метод
• Възможност за връщане на
повече от една стойност чрез
използване на няколко
аргумента
• Декларират се с поставяне на
ключовата дума „out” пред
дефиницията на параметъра

// деклариране
void GetCourseInfo(out string course,
out string organisation,
out int year)
{
course = “Програмиране на C#”;
organisation = “ДАВИД академия”;
year = 2013;
}
Изходни параметри
• Използват се с поставяне на
ключовата дума „out” пред
аргумента
• Аргументът трябва да е
предварително декларирана
променлива от същия тип
• Не е нужно аргументът да
има предварително
присвоена стойност
• Извикването гарантира, че в
метода ще се присвои
стойност на аргумента

// деклариране
void GetCourseInfo(out string course,
out string organisation,
out int year)
{
course = “Програмиране на C#”;
organisation = “ДАВИД академия”;
year = 2013;
}
// използване
string courseName;
string organisationName;
int year;
GetCourseInfo(out courseName,
out organisationName,
out year);
Масиви от параметри
• Не винаги е известно с колко
параметъра ще бъде извикан
даден метод
• Например string.Format!
• Какво да правим?!

string message;
// извикване с два аргумента
message = string.Format(
“Курс {0}”,
courseName);
// извикване с три аргумента
message = string.Format(
“Курс {0} на {1}”,
courseName, organisationName);
// извикване с четири аргумента
message = string.Format(
“Курс {0} ({2}) на {1}”,
courseName, organisationName, year);
// де факто могат да бъдат произволен брой
Масиви от параметри
• Произволен брой параметри
на метод указваме с масив от
параметри
• Декларират се с поставяне на
ключовата дума „params”
пред дефиницията на първия
параметъра
• Този параметър трябва да е
едномерен масив от типа
параметри, които очакваме
• В тялото на метода работим с
параметрите като с масив

// деклариране
void ShowContent(string title,
params string[] lines)
{
Console.WriteLine(“Title: {0}”, title);
for (int i = 0; i < lines.Length; i++)
{
Console.WriteLine(“{0}: {1}”,
i, lines[i]);
}
}
Масиви от параметри
• След масив от параметри не
може да има други
параметри
• Дефиницията на един метод
може да декларира само
един масив от параметри

// деклариране
void ShowContent(string title,
params string[] lines)
{
Console.WriteLine(“Title: {0}”, title);
for (int i = 0; i < lines.Length; i++)
{
Console.WriteLine(“{0}: {1}”,
i, lines[i]);
}
}
Масиви от параметри
• Извикването става с подаване
на 0 или повече параметъра
от типа на елементите в
декларирания аргумент
• Като параметър можем да
подадем и обикновен масив

// деклариране
void ShowContent(string title,
params string[] lines)
{
Console.WriteLine(“Title: {0}”, title);
for (int i = 0; i < lines.Length; i++)
{
Console.WriteLine(“{0}: {1}”,
i, lines[i]);
}
}
// използване с аргументи
ShowContent(“Day 1”, “My dead diary,”,
“I wrote yet another C# program!”);
// използване с масив
ShowContent(“Program.cs”,
File.ReadAllLines(“Program.cs”));
Незадължителни аргументи
• Незадължителни аргументи
– Деклариране: на параметъра
се задава стойност по
подразбиране
– Използване: за стойност на
пропуснатите аргументи се
използва стойността по
подразбиране на съответния
параметър

// деклариране на метод с
// незадължителни аргументи
void SendEmail(
string text,
string subject = null,
string from = null)
{
// …
}
// използване на метод с
// незадължителен аргумент
SendEmail(“Hi, there!”);
Именувани аргументи
• Именувани аргументи

•

// деклариране на метод с
// незадължителни аргументи
– Използване: споменава се
double GetRectangleSurface(
double width, double height = 0.0d)
наименованието на
параметъра, за който се подава {
return width * height;
стойност
}
Правила за използване
// използване на именувани аргументи
– Редът на именуваните аргументи double s = GetRectangleSurface(
height: 1.0d, width: 0.5d);
не е от значение
// използване на именувани и
– Именувани аргументи могат да // незадължителни аргументи
следват позиционни аргументи
s = GetRectangleSurface(width: 0.5d);

– След именувани аргументи не
могат да се използват
позиционни аргументи
Презаписване на методи
• Презаписването на методи е
възможността в една област
да бъдат декларирани повече
от един метод с едно и също
наименование, но различна
сигнатура
• Какво е сигнатура на метод?!
– Включва наименованието
му, типа и вида на параметрите
и техния ред
– Не включва връщания тип данни
и ключовата дума “params”

void F();
//
void F(int x);
//
void F(ref int x);
//
void F(int x, int y);
//
int F(string s);
//
int F(int x);
//
void F(string[] a);
//
void F(params string[] a); //

F()
F(int)
F(ref int)
F(int, int)
F(string)
F(int)
F(string[])
F(string[])

// ЗАБЕЛЕЖКА: сигнатурите не могат да се
// различават само по думите „ref” и “out”
void F(out int x);
// F(out int)
Методи, параметри, аргументи, презаписване - демо
// демонстрация
Често използвани методи – символни низове
• Проверка дали един низ е нулев, празен или съставен само
от интервали
• Форматиране на низ
• Подравняване и подкастряне на низ
• Взимане на дължината на низ
• Извличане на подниз
• Търсене и замяна на символ и подниз в низ
• Проверка за начало и край на низ
• Съединяване на масив от низове в низ
• Разделяне на низ на масив от низове
• Превръщане между малки и големи букви
Често използвани методи – превръщане на данни
• Превръщане на стойност в низ – ToString
• Превръщане на низ в стойност от числов тип – Parse
• Превръщане на стойност в основен тип данни – Convert
Често използвани методи – работа с файлове
• Четене и запис на файл като масив от байтове
• Четене и запис на файл като текст
• Четене и запис на файл като множество от редове
Често използвани методи – работа с масиви
•
•
•
•
•
•
•

Клониране на масив
Копиране на масив
Сортиране на масив
Изчистване на масив
Търсене в масив
Взимане на размерностите на масив
Обръщане на масив
Често използвани методи – работа с конзола
•
•
•
•
•
•

Изчистване на екрана
Издаване на звук
Изчитане и печат на текст
Установяване на големина на прозореца
Установяване на позиция на курсора
Допълнителни възможности:
–
–
–
–
–

Проверка за натиснати (специални) клавиши
Позиция на курсора
Цвят на шрифта и фона
Големина и позиция на прозореца
Заглавие на прозореца
Често използвани методи – други методи
• Генериране на произволни числа
– генериране на число
– изпълнение на събития с вероятностен характер

• Изчакване на определен интервал от време
Често използвани методи
// демонстрация
Задачи за упражнение – Златотърсачи
• Създайте метод GetFieldBounds, в който потребителят
въвежда две цели числа x ∈ (10; maxX) и y ∈ (10; maxY), maxX
и maxY се подават в параметър. Потребителят да може да
откаже въвеждането с въвеждане на празен низ, а методът
връща информация дали потребителят е отказал въвеждане
или не, както и въведените числа (ако са въведени такива).
Задачи за упражнение – Златотърсачи
• Създайте метод CreateField, който създава и връща
двумерен масив с размери m и n, елементите на който
запълнете с произволни стойности от изброим списък с
елементи:
– „OurGuy“ – точно един на произволно място в полето;
– „SomeGuy“ – брой съответстващ на 5% от местата в полето на
произволни места в полето;
– „Diamond” – брой съответстващ на 10% от местата в полето на
произволни места в полето (броят им се връща от метода);
– „Ground“ – произволно попълнен с вероятност 40%;
– „Grass“ – произволно попълнен с вероятност 30%;
– „Tree“ – произволно попълнен с вероятност 20%;
– „Stone“ – произволно попълнен с вероятност 10%.
Задачи за упражнение – Златотърсачи
• Създайте метод DrawField, който „рисува“ на екрана
съдържанието на масива от предишната задача. За всеки
елемент от масива поставя съответния оцветен символ:
–
–
–
–
–
–
–

„OurGuy“ – символ „☺“ (U+263A) oцветен в цвят по избор;
„SomeGuy“ – символ „☻” (U+263B) оцветен в цвят по избор;
„Diamond” – символ „♦“ (U+2666) оцветен в светло сиво;
„Ground“ – символ „▒“ (U+2592) оцветен в светло кафяво;
„Grass“ – символ „▓“ (U+2593) оцветен в светло зелено;
„Tree“ – символ „♣“ (U+2663) оцветен в тъмно зелено;
„Stone“ – символ „ “ (U+0665) оцветен в тъмно сиво.
Задачи за упражнение – Златотърсачи
• Направете метод MoveGuy, който приема като параметър
„поле“, двойка координатите и посока (стойност от
изброим списък “Up”, “Down”, “Left” или “Right”), и мести
„guy” намиращ се на съответните координати в съответната
посока, само като там има „ground”, „grass” или
„diamond”. След себе си „guy“ оставя „ground”.
• Направете метод MoveSomeGuys, който приема като
параметър „поле“ и премества всички „some guys“ в
произволна посока.
• Направете метод MoveOurGuy, който приема като
параметър „поле“ и посока, и мести „our guy” в
определената посока.
Задачи за упражнение – Златотърсачи
• Направете метод ProcessInput, който приема като
параметър „полето“ и проверява дали потребителят е
натиснал клавиш:
– Ако е натиснал стрелка, методът връща стойност съответстваща на
посоката на стрелката в референтен параметър
– Ако е натиснал Escape, методът връща информация за това в
изходен параметър
– Методът връща информация дали потребителят е натиснал клавиш
или не
Задачи за упражнение – Златотърсачи
• Направете програма съдържаща всички изработени погоре методи, като основната програма трябва да:
1. изчисти екрана
2. подкани потребителя да въведе размер на полето не по-голям от
този на екрана (ако потребителят не въведе такъв, програмата
трябва да прекрати работа)
3. създаде „поле“ с въведените от потребителя размери
4. до натискане на „Escape” или свършване на „диамантите“:
1.
2.
3.
4.

рисува „полето“
премества всички „other guys”
обработва входа от потребителя и, ако е нужно, премества “our guy”
изчаква 100 ms

5. извежда събрания от потребителя процент „диаманти“
Въпроси?
Благодаря!
• Валери Дачев
– valery@david.bg
– @vdachev
– https://facebook.com/vdachev

• ДАВИД академия
–
–
–
–

acad@david.bg
http://acad.david.bg/
@david_academy
https://facebook.com/DavidAcademy

Contenu connexe

En vedette

Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияУчилищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияDAVID Academy
 
Курс по програмиране на C# (2013) - Помагало
Курс по програмиране на C# (2013) - ПомагалоКурс по програмиране на C# (2013) - Помагало
Курс по програмиране на C# (2013) - ПомагалоDAVID Academy
 
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2DAVID Academy
 
Информационни технологи за V клас, изд. Булвест 2000
Информационни технологи за V клас, изд. Булвест 2000Информационни технологи за V клас, изд. Булвест 2000
Информационни технологи за V клас, изд. Булвест 2000Ангел Ангелов
 
Курс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSКурс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSDAVID Academy
 
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...DAVID Academy
 
Помагало по география за 6 клас
Помагало по география за 6 класПомагало по география за 6 клас
Помагало по география за 6 класDani Hranov
 
Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13DAVID Academy
 
Годишно обобщение по география и икономика - 5 клас
Годишно обобщение по география и икономика - 5 класГодишно обобщение по география и икономика - 5 клас
Годишно обобщение по география и икономика - 5 класMilena Petkova
 
събиране на десетични дроби. свойства
събиране на десетични дроби. свойствасъбиране на десетични дроби. свойства
събиране на десетични дроби. свойстваliageorg
 
деление на дд задачи
деление на дд задачиделение на дд задачи
деление на дд задачиliageorg
 
събиране и изваждане на дд
събиране и изваждане на ддсъбиране и изваждане на дд
събиране и изваждане на ддliageorg
 
четене и сравняване на десетични дроби
четене и сравняване на десетични дробичетене и сравняване на десетични дроби
четене и сравняване на десетични дробиliageorg
 
всички действия с дд
всички действия с ддвсички действия с дд
всички действия с ддliageorg
 
умножение на десетични дроби
умножение на десетични дробиумножение на десетични дроби
умножение на десетични дробиliageorg
 

En vedette (20)

Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11
 
Училищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияУчилищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - Упражнения
 
Курс по програмиране на C# (2013) - Помагало
Курс по програмиране на C# (2013) - ПомагалоКурс по програмиране на C# (2013) - Помагало
Курс по програмиране на C# (2013) - Помагало
 
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)
 
Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2
 
Информационни технологи за V клас, изд. Булвест 2000
Информационни технологи за V клас, изд. Булвест 2000Информационни технологи за V клас, изд. Булвест 2000
Информационни технологи за V клас, изд. Булвест 2000
 
Курс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSКурс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSS
 
OOP 1 - 5
OOP 1 - 5OOP 1 - 5
OOP 1 - 5
 
История на лакомствата1
История на лакомствата1История на лакомствата1
История на лакомствата1
 
Лице
ЛицеЛице
Лице
 
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
 
Помагало по география за 6 клас
Помагало по география за 6 класПомагало по география за 6 клас
Помагало по география за 6 клас
 
Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13
 
Годишно обобщение по география и икономика - 5 клас
Годишно обобщение по география и икономика - 5 класГодишно обобщение по география и икономика - 5 клас
Годишно обобщение по география и икономика - 5 клас
 
събиране на десетични дроби. свойства
събиране на десетични дроби. свойствасъбиране на десетични дроби. свойства
събиране на десетични дроби. свойства
 
деление на дд задачи
деление на дд задачиделение на дд задачи
деление на дд задачи
 
събиране и изваждане на дд
събиране и изваждане на ддсъбиране и изваждане на дд
събиране и изваждане на дд
 
четене и сравняване на десетични дроби
четене и сравняване на десетични дробичетене и сравняване на десетични дроби
четене и сравняване на десетични дроби
 
всички действия с дд
всички действия с ддвсички действия с дд
всички действия с дд
 
умножение на десетични дроби
умножение на десетични дробиумножение на десетични дроби
умножение на десетични дроби
 

Similaire à Училищен курс по програмиране на C# (2013/2014), занятие №4

Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14DAVID Academy
 
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)DAVID Academy
 
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...DAVID Academy
 
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...DAVID Academy
 
Курс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. РекурсияКурс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. РекурсияDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7DAVID Academy
 
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...DAVID Academy
 
JDK 1.5 New Features
JDK 1.5 New FeaturesJDK 1.5 New Features
JDK 1.5 New FeaturesSvetlin Nakov
 
fdgdfgdfg
fdgdfgdfgfdgdfgdfg
fdgdfgdfgsotirov
 

Similaire à Училищен курс по програмиране на C# (2013/2014), занятие №4 (13)

Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8
 
Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14Училищен курс по програмиране на C# (2013/2014), занятие №14
Училищен курс по програмиране на C# (2013/2014), занятие №14
 
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
 
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
 
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
 
Скаларни типове данни
Скаларни типове данниСкаларни типове данни
Скаларни типове данни
 
Курс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. РекурсияКурс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
 
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
 
Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7
 
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
 
JDK 1.5 New Features
JDK 1.5 New FeaturesJDK 1.5 New Features
JDK 1.5 New Features
 
fdgdfgdfg
fdgdfgdfgfdgdfgdfg
fdgdfgdfg
 
C++ OpenFest 2015
C++ OpenFest 2015C++ OpenFest 2015
C++ OpenFest 2015
 

Plus de DAVID Academy

Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)DAVID Academy
 
Курс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSКурс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSDAVID Academy
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLDAVID Academy
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12DAVID Academy
 
Курс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLКурс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоУчилищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоDAVID Academy
 
Курс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesКурс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesDAVID Academy
 
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET FrameworkКурс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET FrameworkDAVID Academy
 
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLКурс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLDAVID Academy
 
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...DAVID Academy
 
Курс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. ПредставянеКурс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. ПредставянеDAVID Academy
 
Курс по информационни технологии (2013) - Помагало
Курс по информационни технологии (2013) - ПомагалоКурс по информационни технологии (2013) - Помагало
Курс по информационни технологии (2013) - ПомагалоDAVID Academy
 
Курс по програмиране на C# (2013) - Упражнения
Курс по програмиране на C# (2013) - УпражненияКурс по програмиране на C# (2013) - Упражнения
Курс по програмиране на C# (2013) - УпражненияDAVID Academy
 
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииКурс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииDAVID Academy
 

Plus de DAVID Academy (16)

Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
 
Курс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSКурс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSS
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTML
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
 
Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12
 
Курс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLКурс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTML
 
Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9
 
Училищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоУчилищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - Помагало
 
Курс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesКурс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web Services
 
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET FrameworkКурс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
 
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLКурс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
 
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
 
Курс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. ПредставянеКурс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. Представяне
 
Курс по информационни технологии (2013) - Помагало
Курс по информационни технологии (2013) - ПомагалоКурс по информационни технологии (2013) - Помагало
Курс по информационни технологии (2013) - Помагало
 
Курс по програмиране на C# (2013) - Упражнения
Курс по програмиране на C# (2013) - УпражненияКурс по програмиране на C# (2013) - Упражнения
Курс по програмиране на C# (2013) - Упражнения
 
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииКурс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
 

Училищен курс по програмиране на C# (2013/2014), занятие №4

  • 1. Курс по програмиране на C# Занятие №4 Функции и методи. Често използвани методи 2013
  • 2. Съдържание 1/2 • Функции и методи – – – – – Контрол на изпълнението Видимост на променливите Методи без връщана стойност Методи с връщана стойност Ограничения • Параметри – Референтни параметри – Изходящи параметри – Масиви от параметри
  • 3. Съдържание 2/2 • Аргументи – Незадължителни аргументи – Именувани аргументи • Презаписване на методи • Често използвани методи – – – – – – Символни низове Превръщане на данни Работа с файлове Работа с масиви Работа с конзола Други методи
  • 4. Функции и методи • Какво е „функция“? Какво е „метод“? – Функция е подпрограма, която извършва конкретна дейност и може да бъде извиквана от друга част от програмата – Функциите могат да приемат един или повече параметри – Функциите могат да връщат единична стойност като резултат – Аргумент е стойността подавана на даден параметър – Метод е функция дефинирана в рамките на клас или структура – Процедури наричаме функции, които не връщат резултат – В езика C# методът е единственият начин за дефиниране на функции
  • 5. Функции и методи • Приложение на функциите – – – – Разбиване на приложението на по-конкретни задачи Преизползване на програмния код Разделяне на отговорностите и по-добра поддръжка Подобрена разбираемост на кода • BCL представлява библиотека от методи подпомагащи разработчика в създаването на приложения без това да става от нулата
  • 6. Функции и методи • Характеристики на методите – – – – Наименование Брой и тип на параметрите Връщана стойност Клас, в който методът е дефиниран • Сигнатура на метод – Наименование – Ред, вид и тип на параметрите • Наименованието на метода трябва да отразява неговото предназначение • В един и същи клас не може да има повече от един метод с една и съща сигнатура
  • 7. Функции и методи • Деклариране на методи – Тип на данните на връщаната стойност (или “void” ако няма такава) – Наименование – Описание на параметрите – Тяло на метода // метод без параметри и резултат void Run() { // prison break } // метод с параметър без резултат void Notify(string message) { // изпраща уведомления по e-mail } // метод с два параметъра и резултат int Sum(int a, int b) { int c = a + b; return c; }
  • 8. Функции и методи • Използване на методи – Наименование на клас или обект, ако методът е деклариран в друг клас – Наименованието на метода – Списък от аргументи // извикване на метод без параметър // (след атомна бомба - нищо) DropNuclearBomb(); // извикване на метод с параметър // (или „да изчезнеш за 60 секунди“) SetBombTimer(60); // извикване на метод с няколко // параметъра PlantBomb(here, “Ahmet”); // използване на резултат int sum = Sum(a, b); // префиксиране с наименование на клас Console.WriteLine(“Kaboom!”);
  • 9. Контрол на изпълнението • Изпълнението на метод започва при неговото извикване • Изпълнението на метод приключва: – при достигане на края му – при достигане на ключовата дума „return” – при възникване на грешка • След изпълнение на метод, изпълнението продължава от мястото, на което е бил извикан
  • 10. Видимост на променливите • Локални променливи за един метод са тези декларирани в неговото тяло • В тялото на един метод не могат да бъдат декларирани повече от една променливи с едно и също наименование • Локалните променливи не могат да бъдат достъпвани извън метода • Параметрите имат статут на локални променливи void GimmeFive() { // локална променлива “five” int five = 5; // използване на локална променлива Console.WriteLine(“Hi {0}!”, five); // къде отиваш ти, може би?! string five = “Five”; } Console.WriteLine(five); // Ко?! Не!
  • 11. Методи без връщана стойност • Когато методът не връща резултат, изпълнението приключва: – при достигане на края му – при достигане на ключовата дума “return” – при възникване на грешка void DoSomethingNerd(WeatherInfo info) { // ако времето не е хубаво… if (!IsWeatherFine(info)) return; // да порешаваме задачи! SolveSomeMathsProblems(); }
  • 12. Методи с връщана стойност • Когато методът връща резултат, изпълнението приключва: – при използване на ключовата дума „return” следвана от израз – при възникване на грешка • След ключовата дума „return” задължително трябва да има израз, който връща стойност от същия тип, като резултата от метода int Sum(int a, int b) { int c = a + b; // Назад, назад, моме, Калино! return c; } // взима дискриминантата на кв. у-е double GetDiscriminant( double a, double b, double c) { return b * b – 4 * a * c; }
  • 13. Методи връщащи стойност • Извиквания към методи връщащи стойност могат да бъдат използвани в изрази – В изрази извикването на метода се заменя със стойността на върнатия от него резултат // имаме триъгълник със страни… double a = 5, b = 3, c = 2; // забравете, че сте видели това: double s = Math.Sqrt( GetSemiperimeter(a, b, c) * (GetSemiperimeter(a, b, c) – a) * (GetSemiperimeter(a, b, c) – b) * (GetSemiperimeter(a, b, c) – c)); // по-добре го напишете така: double p = GetSemiperimeter(a, b, c); s = Math.Sqrt(p*(p-a)*(p-b)*(p-c)); // накрая, разбира се: Console.WriteLine(”Лицето е {0}.”, s);
  • 14. Параметри • Параметър от стойностен тип – Параметърът взима стойността от съответния аргумент – При изпълнение на метода, стойността на аргумента се запазва // параметър от стойностен тип void CountBackwards(int n) { for (; n > 0; n--) Console.WriteLine(n); } // променлива от стойностен тип int n = 100; // използване на стойностен аргумент CountBackwards(n); // какво ще изпише тук? Console.WriteLine(n);
  • 15. Параметри • Параметър от референтен тип – Параметърът взима референцията от съответния аргумент – При изпълнение на метода, референциите на аргумента се запазват, но не винаги и съхранените зад тях данни // масивите са от референтен тип int[] arr = new [] { 1, 3, 2, 10, 0 }; // извикваме метод за сортиране Array.Sort(arr); // след извикването, масивът си е // останал на същото място в паметта, // но пък сортиран
  • 16. Параметри • Параметър от референтен тип – Да си припомним Иванчо! • Но по-подробно с Иванчо и други (референтни) типове ще се запознаем по-късно в курса // правим си „референтно“ хлапе Иванчо Person kid = new Person(“Иванчо”); // Иванчо е слушал и отива да си играе Play(kid);// Иванчо скача на въже… // … и чупи два шийни прешлена // Но, въпреки това, той е същият // Иванчо, който е отишъл да си играе… ShowCervicalVertebrae(kid); // … просто явно е останал с пет // функциониращи шийни прешлена
  • 17. Функции и методи - демо // демонстрация
  • 18. Ограничения • Методите могат да връщат само една стойност • Ако искаме да върнем повече?! – – – – – масиви структури обекти референтни параметри изходящи параметри // методът ни връща масив string[] GetCourseInfo() { return new[] { // наименование на курса “Курс по програмиране на C#”, // наименование на организацията “ДАВИД академия”, }; } string[] info = GetCourseInfo(); Console.WriteLine( “Курс: {0}; Организация: {1}”, info[0], info[1]); // … и сега добавете годината! 
  • 19. Референтни параметри • Позволяват предаването на аргументите по референция, а не по стойност • Възможност за промяна на аргумента в извиквания метод • Възможност за връщане на повече от една стойност чрез използване на няколко аргумента • Декларират се с поставяне на ключовата дума „ref” пред дефиницията на параметъра // деклариране void GetCourseInfo(ref string course, ref string organisation, ref int year) { course = “Програмиране на C#”; organisation = “ДАВИД академия”; }
  • 20. Референтни параметри • Използват се с поставяне на ключовата дума „ref” пред аргумента • Аргументът трябва да е предварително декларирана променлива от същия тип • Аргументът трябва да има предварително присвоена стойност • Извикването не гарантира, че в метода ще се присвои стойност на аргумента // деклариране void GetCourseInfo(ref string course, ref string organisation, ref int year) { course = “Програмиране на C#”; organisation = “ДАВИД академия”; } // използване string courseName = null; string organisationName = null; int year = 2013; GetCourseInfo(ref courseName, ref organisationName, ref year);
  • 21. Изходни параметри • Позволяват връщането на стойност в подаден (изходен) параметър • Задължителна промяна на аргумента в извиквания метод • Възможност за връщане на повече от една стойност чрез използване на няколко аргумента • Декларират се с поставяне на ключовата дума „out” пред дефиницията на параметъра // деклариране void GetCourseInfo(out string course, out string organisation, out int year) { course = “Програмиране на C#”; organisation = “ДАВИД академия”; year = 2013; }
  • 22. Изходни параметри • Използват се с поставяне на ключовата дума „out” пред аргумента • Аргументът трябва да е предварително декларирана променлива от същия тип • Не е нужно аргументът да има предварително присвоена стойност • Извикването гарантира, че в метода ще се присвои стойност на аргумента // деклариране void GetCourseInfo(out string course, out string organisation, out int year) { course = “Програмиране на C#”; organisation = “ДАВИД академия”; year = 2013; } // използване string courseName; string organisationName; int year; GetCourseInfo(out courseName, out organisationName, out year);
  • 23. Масиви от параметри • Не винаги е известно с колко параметъра ще бъде извикан даден метод • Например string.Format! • Какво да правим?! string message; // извикване с два аргумента message = string.Format( “Курс {0}”, courseName); // извикване с три аргумента message = string.Format( “Курс {0} на {1}”, courseName, organisationName); // извикване с четири аргумента message = string.Format( “Курс {0} ({2}) на {1}”, courseName, organisationName, year); // де факто могат да бъдат произволен брой
  • 24. Масиви от параметри • Произволен брой параметри на метод указваме с масив от параметри • Декларират се с поставяне на ключовата дума „params” пред дефиницията на първия параметъра • Този параметър трябва да е едномерен масив от типа параметри, които очакваме • В тялото на метода работим с параметрите като с масив // деклариране void ShowContent(string title, params string[] lines) { Console.WriteLine(“Title: {0}”, title); for (int i = 0; i < lines.Length; i++) { Console.WriteLine(“{0}: {1}”, i, lines[i]); } }
  • 25. Масиви от параметри • След масив от параметри не може да има други параметри • Дефиницията на един метод може да декларира само един масив от параметри // деклариране void ShowContent(string title, params string[] lines) { Console.WriteLine(“Title: {0}”, title); for (int i = 0; i < lines.Length; i++) { Console.WriteLine(“{0}: {1}”, i, lines[i]); } }
  • 26. Масиви от параметри • Извикването става с подаване на 0 или повече параметъра от типа на елементите в декларирания аргумент • Като параметър можем да подадем и обикновен масив // деклариране void ShowContent(string title, params string[] lines) { Console.WriteLine(“Title: {0}”, title); for (int i = 0; i < lines.Length; i++) { Console.WriteLine(“{0}: {1}”, i, lines[i]); } } // използване с аргументи ShowContent(“Day 1”, “My dead diary,”, “I wrote yet another C# program!”); // използване с масив ShowContent(“Program.cs”, File.ReadAllLines(“Program.cs”));
  • 27. Незадължителни аргументи • Незадължителни аргументи – Деклариране: на параметъра се задава стойност по подразбиране – Използване: за стойност на пропуснатите аргументи се използва стойността по подразбиране на съответния параметър // деклариране на метод с // незадължителни аргументи void SendEmail( string text, string subject = null, string from = null) { // … } // използване на метод с // незадължителен аргумент SendEmail(“Hi, there!”);
  • 28. Именувани аргументи • Именувани аргументи • // деклариране на метод с // незадължителни аргументи – Използване: споменава се double GetRectangleSurface( double width, double height = 0.0d) наименованието на параметъра, за който се подава { return width * height; стойност } Правила за използване // използване на именувани аргументи – Редът на именуваните аргументи double s = GetRectangleSurface( height: 1.0d, width: 0.5d); не е от значение // използване на именувани и – Именувани аргументи могат да // незадължителни аргументи следват позиционни аргументи s = GetRectangleSurface(width: 0.5d); – След именувани аргументи не могат да се използват позиционни аргументи
  • 29. Презаписване на методи • Презаписването на методи е възможността в една област да бъдат декларирани повече от един метод с едно и също наименование, но различна сигнатура • Какво е сигнатура на метод?! – Включва наименованието му, типа и вида на параметрите и техния ред – Не включва връщания тип данни и ключовата дума “params” void F(); // void F(int x); // void F(ref int x); // void F(int x, int y); // int F(string s); // int F(int x); // void F(string[] a); // void F(params string[] a); // F() F(int) F(ref int) F(int, int) F(string) F(int) F(string[]) F(string[]) // ЗАБЕЛЕЖКА: сигнатурите не могат да се // различават само по думите „ref” и “out” void F(out int x); // F(out int)
  • 30. Методи, параметри, аргументи, презаписване - демо // демонстрация
  • 31. Често използвани методи – символни низове • Проверка дали един низ е нулев, празен или съставен само от интервали • Форматиране на низ • Подравняване и подкастряне на низ • Взимане на дължината на низ • Извличане на подниз • Търсене и замяна на символ и подниз в низ • Проверка за начало и край на низ • Съединяване на масив от низове в низ • Разделяне на низ на масив от низове • Превръщане между малки и големи букви
  • 32. Често използвани методи – превръщане на данни • Превръщане на стойност в низ – ToString • Превръщане на низ в стойност от числов тип – Parse • Превръщане на стойност в основен тип данни – Convert
  • 33. Често използвани методи – работа с файлове • Четене и запис на файл като масив от байтове • Четене и запис на файл като текст • Четене и запис на файл като множество от редове
  • 34. Често използвани методи – работа с масиви • • • • • • • Клониране на масив Копиране на масив Сортиране на масив Изчистване на масив Търсене в масив Взимане на размерностите на масив Обръщане на масив
  • 35. Често използвани методи – работа с конзола • • • • • • Изчистване на екрана Издаване на звук Изчитане и печат на текст Установяване на големина на прозореца Установяване на позиция на курсора Допълнителни възможности: – – – – – Проверка за натиснати (специални) клавиши Позиция на курсора Цвят на шрифта и фона Големина и позиция на прозореца Заглавие на прозореца
  • 36. Често използвани методи – други методи • Генериране на произволни числа – генериране на число – изпълнение на събития с вероятностен характер • Изчакване на определен интервал от време
  • 38. Задачи за упражнение – Златотърсачи • Създайте метод GetFieldBounds, в който потребителят въвежда две цели числа x ∈ (10; maxX) и y ∈ (10; maxY), maxX и maxY се подават в параметър. Потребителят да може да откаже въвеждането с въвеждане на празен низ, а методът връща информация дали потребителят е отказал въвеждане или не, както и въведените числа (ако са въведени такива).
  • 39. Задачи за упражнение – Златотърсачи • Създайте метод CreateField, който създава и връща двумерен масив с размери m и n, елементите на който запълнете с произволни стойности от изброим списък с елементи: – „OurGuy“ – точно един на произволно място в полето; – „SomeGuy“ – брой съответстващ на 5% от местата в полето на произволни места в полето; – „Diamond” – брой съответстващ на 10% от местата в полето на произволни места в полето (броят им се връща от метода); – „Ground“ – произволно попълнен с вероятност 40%; – „Grass“ – произволно попълнен с вероятност 30%; – „Tree“ – произволно попълнен с вероятност 20%; – „Stone“ – произволно попълнен с вероятност 10%.
  • 40. Задачи за упражнение – Златотърсачи • Създайте метод DrawField, който „рисува“ на екрана съдържанието на масива от предишната задача. За всеки елемент от масива поставя съответния оцветен символ: – – – – – – – „OurGuy“ – символ „☺“ (U+263A) oцветен в цвят по избор; „SomeGuy“ – символ „☻” (U+263B) оцветен в цвят по избор; „Diamond” – символ „♦“ (U+2666) оцветен в светло сиво; „Ground“ – символ „▒“ (U+2592) оцветен в светло кафяво; „Grass“ – символ „▓“ (U+2593) оцветен в светло зелено; „Tree“ – символ „♣“ (U+2663) оцветен в тъмно зелено; „Stone“ – символ „ “ (U+0665) оцветен в тъмно сиво.
  • 41. Задачи за упражнение – Златотърсачи • Направете метод MoveGuy, който приема като параметър „поле“, двойка координатите и посока (стойност от изброим списък “Up”, “Down”, “Left” или “Right”), и мести „guy” намиращ се на съответните координати в съответната посока, само като там има „ground”, „grass” или „diamond”. След себе си „guy“ оставя „ground”. • Направете метод MoveSomeGuys, който приема като параметър „поле“ и премества всички „some guys“ в произволна посока. • Направете метод MoveOurGuy, който приема като параметър „поле“ и посока, и мести „our guy” в определената посока.
  • 42. Задачи за упражнение – Златотърсачи • Направете метод ProcessInput, който приема като параметър „полето“ и проверява дали потребителят е натиснал клавиш: – Ако е натиснал стрелка, методът връща стойност съответстваща на посоката на стрелката в референтен параметър – Ако е натиснал Escape, методът връща информация за това в изходен параметър – Методът връща информация дали потребителят е натиснал клавиш или не
  • 43. Задачи за упражнение – Златотърсачи • Направете програма съдържаща всички изработени погоре методи, като основната програма трябва да: 1. изчисти екрана 2. подкани потребителя да въведе размер на полето не по-голям от този на екрана (ако потребителят не въведе такъв, програмата трябва да прекрати работа) 3. създаде „поле“ с въведените от потребителя размери 4. до натискане на „Escape” или свършване на „диамантите“: 1. 2. 3. 4. рисува „полето“ премества всички „other guys” обработва входа от потребителя и, ако е нужно, премества “our guy” изчаква 100 ms 5. извежда събрания от потребителя процент „диаманти“
  • 45. Благодаря! • Валери Дачев – valery@david.bg – @vdachev – https://facebook.com/vdachev • ДАВИД академия – – – – acad@david.bg http://acad.david.bg/ @david_academy https://facebook.com/DavidAcademy