Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
c#_theoretical_1.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.07 Mб
Скачать

Розбір найпростішої програми на мові с

Тепер давайте розглянемо ряд питань, у яких варто (навіть необхідно) розібратися для подальшого успішного вивчення платформи .NET Framework та мови C#. У першу чергу потрібно розглянути структуру програми та структуру методу Main(), точкою входу виконання будь-якої виконуваної збірки.

У мові С# вся логіка програми повинна міститися всередині визначення деякого типу (вище ми вже говорили, що тип являє собою загальний термін, яким позначається будь-який елемент із множини {клас, інтерфейс, структура, перерахування, делегат}). На відміну від багатьох інших мов (зокрема і С++), у С# не допускається створення ні глобальних функцій, ні глобальних змінних. Замість цього потрібно, щоб усі ці елементи містилися усередині визначення типу у вигляді методів, полів, тощо.

Розглянемо найпростішу програму на мові С#, текст якої наведено у лістингу 1.

Лістинг 1. Найпростіша програма на мові C#

using System;

namespace MyTalkingSpace

{

class MyTalking

{

static void Main(string[] args)

{

//вивід повідомлення користувачам

Console.WriteLine ("Hello All!");

Console.WriteLine ("Press any key to continue…");

//очікування натиснення деякої клавіші для завершення роботи

Console.ReadKey();

}

}

}

Перейдемо до розбору програми. У ній ми визначили новий клас MyTalking. Причому ми його визначили у спеціальному (власному) просторі імен MyTalkingSpace. У C# логічне групування власних взаємозалежних типів у спеціальні простори імен здійснюється за допомогою ключового слова namespace{<реалізація власних типів>}. Клас MyTalking підтримує єдиний метод з іменем Main(). Клас, що визначає метод Main(), повинен обов’язково бути присутнім у кожному виконуваному додатку на С# (чи то консольна програма для Windows або служба Windows), оскільки він застосовується для позначення точки входу в додаток. Зверніть увагу, що у визначенні методу Main() присутнє ключове слово static, яке більш докладно ми розглянемо пізніше. Поки досить знати, що статичні (static) члени можуть викликатися без попереднього створення нового екземпляра класу. При визначенні методу Main() поряд із ключовим словом static можe також використовуватися одне із ключових слів public або private (за відсутності таких компілятор буде вважати, що це private).

Крім ключового слова static, даний метод Main() має ще один параметр − масив рядків (string[ ] args). Хоча у даному прикладі цей масив ніяк не обробляється, через даний параметр в принципі може передаватися будь-яка кількість аргументів командного рядка (процес отримання доступу до яких буде описаний трохи нижче). І, нарешті, даний метод Main() наведено у варіанті, коли він повертає значення void, що дозволяє не визначати явно тип результату цього методу з допомогою ключового слова return перед виходом із області дії даного методу.

Розглянутий варіант методу Main() є далеко не єдино можливим варіантом реалізації точки входу. Також допускається використовувати наступні варіанти методу Main():

//тип, що повертається методом int та масив рядків як параметр

static int Main(string[] args)

{

//має обов’язково повертати значення перед виходом!

return 0;

}

//без типу, що повертається методом та без параметрів

static void Main()

{

}

//тип, що повертається int, але без параметрів

static int Main()

{

//має обов’язково повертати значення перед виходом!

return 0;

}

Очевидно, що вибір варіанту методу Main() залежить від двох моментів. По-перше, він залежить від того, чи потрібно, щоб системі після закінчення виконання методу Main() і завершення роботи програми поверталося якесь значення4; в цьому випадку необхідно повертати тип даних int, а не void. По-друге, цей вибір залежить від необхідності обробки параметрів командного рядка, що задаються користувачем; у цьому випадку вони повинні зберігатися в масиві рядків.

Повернемось до нашого прикладу. Логіка програми міститься всередині самого методу Main(). Тут використовується клас Console із простору імен System. До його членів входить статичний метод WriteLine(), який дозволяє відправляти рядок тексту й символ повернення каретки на стандартний пристрій виводу. Крім того, тут викликається метод Console.ReadKey(), щоб вікно командного рядка залишалося видимим доти, поки не буде натиснута деяка клавіша. У даному прикладі ми уникнули визначення типу з використанням повного уточнення (тобто насправді ми мали б писати System.Console.WriteLine()) завдяки використанню підтримуваного у С# ключового слова using. Тобто ключове слово using є просто скороченим способом використання повністю уточненого імені.

Ну, і на завершення розглянемо як можна обробляти масив args у методі Main(). Якщо ще хтось не зрозумів − у лістингу 1 наведено програму на C#, для виводу на консоль привітання всім «Hello all!». Розглянемо узагальнення (модифікацію) програми, текст якої наведено у лістингу 2.

Лістинг 2. Текст програми на мові C#, яка виводить на консоль привітання тільки тим користувачам, імена яких передаються як параметри командного рядка

using System;

namespace MyTalkingSpace

{

class MyTalking

{

static void Main(string[] args)

{

//вивід привітання тільки тим користувачам, імена яких

//передаються як параметри командного рядка

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

{

if(args[i]=="/d" || args[i]=="-d")

{

i++;

Console.WriteLine ("Hello dear {0}!", args[i]);

}

Else

{

Console.WriteLine ("Hello {0}!", args[i]);

}

}

Console.WriteLine ("Press any key to continue…");

//очікування натиснення деякої клавіші для завершення роботи

Console.ReadKey();

}

}

}

У даній модифікації програми продемонстровано один із можливих способів обробки будь-яких можливих параметрів командного рядка, а саме використання циклу for5. За допомогою властивості Length типу System.Array визначається кількість елементів у масиві args. При проході по масиву args: якщо значення елемента є опцією (ми визначили єдину опцію, що відповідає одному із записів /d або -d), то на консоль виводиться привітання для наступного елемента із приставкою dear, інакше − виводиться привітання для поточного елемента у звичному форматі.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]