Вступ до C#

C# (вимовляється "C sharp") — це сучасна мова програмування загального призначення, розроблена Microsoft. Він широко використовується для створення різних типів програм, включаючи настільні, веб-, мобільні та ігрові програми. У цьому посібнику ми розглянемо основи програмування на C#, включаючи типи даних, змінні, потік керування, функції, класи, простори імен тощо.

Крім того, C# пропонує багатий набір функцій та інструментів, що робить його універсальною та потужною мовою програмування для різних областей, включаючи настільні програми, веб-розробку, мобільні програми та розробку ігор за допомогою таких технологій, як Unity. Просуваючись у своїй подорожі C#, ви можете досліджувати більш складні теми, такі як успадкування, поліморфізм, інтерфейси, генерики, LINQ (Language Integrated Query) та асинхронне програмування за допомогою завдань і async/await. Розуміння цих концепцій покращить вашу здатність створювати надійні та масштабовані програми.

Почнемо з основ.

Налаштування середовища розробки

Щоб розпочати кодування на C#, вам потрібно буде налаштувати середовище розробки. Ось кроки, щоб почати:

  • Встановіть Visual Studio: завантажте та інсталюйте Visual Studio з офіційного веб-сайту Microsoft. Visual Studio — це потужне інтегроване середовище розробки (IDE), яке надає всі інструменти, необхідні для розробки C#.
  • Створіть новий проект: запустіть Visual Studio та створіть новий проект. Виберіть відповідний шаблон проекту на основі типу програми, яку ви хочете створити.
  • Напишіть код: коли ваш проект налаштовано, ви можете почати писати код C# у редакторі коду, наданому Visual Studio.

Тепер, коли у вас налаштовано середовище розробки, давайте зануримося в основи програмування на C#.

Програма Hello World

Традиційне "Hello, World!" program часто є першою програмою, яку ви пишете будь-якою мовою програмування. Ось як ви можете написати це на C#:

using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("Hello, World!");
    }
}

У цьому прикладі коду ми спочатку включаємо простір імен 'System', який містить клас під назвою 'Console' для обробки введення та виведення. Потім ми визначаємо клас з назвою 'Program'. У цьому класі ми маємо метод 'Main', який є точкою входу програми C#. Нарешті, ми використовуємо метод 'Console.WriteLine' для друку «Hello, World!» повідомлення на консоль.

Змінні та типи даних

У C# вам потрібно оголосити змінні, перш ніж ви зможете їх використовувати. Змінні містять значення різних типів даних. Ось деякі типи даних, які зазвичай використовуються в C#:

  • 'int': представляє цілі числа (наприклад, 10, -5, 0).
  • 'double': представляє числа з плаваючою комою з десятковими знаками (наприклад, 3,14, -0,5).
  • 'bool': представляє логічні значення (істина або хибність).
  • 'string': представляє послідовність символів (наприклад, "Hello", "C#").

Ось приклад, який демонструє оголошення змінної та основні операції:

int age = 25;
double pi = 3.14;
bool isStudent = true;
string name = "John";

int sum = age + 5;
double circleArea = pi * 2 * 2;
bool isAdult = age >= 18;

Console.WriteLine("Name: " + name);
Console.WriteLine("Age: " + age);
Console.WriteLine("Sum: " + sum);
Console.WriteLine("Circle Area: " + circleArea);
Console.WriteLine("Is Adult? " + isAdult);

У цьому прикладі ми оголошуємо змінні 'age', 'pi', 'isStudent' і 'name' з їх відповідними типи даних. Ми виконуємо деякі основні операції, такі як додавання, множення та порівняння. Для відображення значень на консолі використовується метод 'Console.WriteLine'.

Масиви та колекції

Масиви та колекції — це фундаментальні структури даних у C#, які дозволяють ефективно зберігати й обробляти численні значення. Вони відіграють вирішальну роль у різних сценаріях програмування та широко використовуються в розробці C#.

Масиви

Масив у C# — це набір елементів одного типу фіксованого розміру. Ось приклад:

int[] numbers = new int[5] { 1, 2, 3, 4, 5 };

У цьому прикладі ми оголошуємо цілочисельний масив з назвою 'numbers' із розміром '5'. Ми ініціалізуємо масив зазначеними значеннями за допомогою фігурних дужок '{}'. Ви можете отримати доступ до окремих елементів масиву за допомогою нотації індексу, починаючи з 0. Наприклад, 'numbers[0]' дає вам перший елемент.

Колекції

Колекції в C# забезпечують більшу гнучкість, ніж масиви, оскільки вони можуть динамічно збільшуватися або звужуватися. C# пропонує різні типи колекцій, наприклад 'List<T>', 'Dictionary<TKey, TValue>' і 'HashSet<T>'.

Ви можете створити загальну колекцію, використовуючи один із класів у просторі імен 'System.Collections.Generic'. Загальна колекція корисна, коли кожен елемент у колекції має однаковий тип даних. Загальна колекція забезпечує жорстку типізацію, дозволяючи додавати лише бажаний тип даних.

using System.Collections.Generic;

Ось приклад використання колекції 'List<T>':

List<string> names = new List<string>();
names.Add("Alice");
names.Add("Bob");
names.Add("Charlie");

У цьому прикладі ми створюємо список рядків з назвою 'names' за допомогою класу ініціалізатора 'List<T>'. Ми використовуємо метод 'Add()', щоб додати елементи до списку.

'List<T>' надає багато корисних методів і властивостей для роботи з колекціями, наприклад 'Count' для отримання кількості елементів, 'Remove()' для видалення елемент і 'Contains()', щоб перевірити, чи існує елемент.

Ітерація над масивами та колекціями

Ви можете перебирати масиви та колекції за допомогою циклів, наприклад 'for' або 'foreach', щоб отримати доступ до їхніх елементів і керувати ними. Ось приклад ітерації по масиву та списку:

int[] numbers = new int[] { 1, 2, 3, 4, 5 };

foreach (int number in numbers)
{
    Console.WriteLine(number);
}

List<string> names = new List<string>() { "Alice", "Bob", "Charlie" };

foreach (string name in names)
{
    Console.WriteLine(name);
}

У цьому прикладі ми використовуємо цикл 'foreach' для повторення кожного елемента в масиві 'numbers' і списку 'names' і друкуємо їх у консоль.

Потік керування

Потік керування дозволяє приймати рішення та виконувати різні блоки коду на основі умов. C# надає декілька структур потоку керування, включаючи оператори 'if', оператори 'switch' і цикли.

'If'

Інструкція 'if' дозволяє вам виконати блок коду, лише якщо задана умова виконується. Ось приклад:

int number = 10;

if (number > 0)
{
    Console.WriteLine("The number is positive.");
}
else if (number < 0)
{
    Console.WriteLine("The number is negative.");
}
else
{
    Console.WriteLine("The number is zero.");
}

У цьому прикладі ми перевіряємо значення змінної 'number' за допомогою пунктів 'if', 'else if' і 'else'. Залежно від стану буде надруковано відповідне повідомлення.

'Switch'

Оператор 'switch' дозволяє вибрати один із багатьох блоків коду для виконання на основі значення виразу. Ось приклад:

int dayOfWeek = 2;
string dayName;

switch (dayOfWeek)
{
    case 1:
        dayName = "Monday";
        break;
    case 2:
        dayName = "Tuesday";
        break;
    case 3:
        dayName = "Wednesday";
        break;
    // ...
    default:
        dayName = "Invalid day";
        break;
}

Console.WriteLine("Today is " + dayName + ".");

У цьому прикладі ми призначаємо назву дня на основі значення 'dayOfWeek' за допомогою оператора 'switch'. Інструкції 'case' вказують можливі значення, і випадок 'default' виконується, якщо жоден із випадків не збігається.

Інструкції циклу

Цикли дозволяють багаторазово виконувати блок коду, доки не буде виконано певну умову. C# надає цикли 'for', 'while' і 'do-while'.

'For'

Цикл 'for' використовується, коли ви заздалегідь знаєте кількість ітерацій. Ось приклад:

for (int i = 0; i < 5; i++)
{
    Console.WriteLine("Iteration: " + i);
}

У цьому прикладі цикл запускається п’ять разів, щоразу друкуючи номер ітерації.

'While'

Цикл 'while' використовується, коли ви не знаєте кількість ітерацій заздалегідь, але у вас є умова, яку потрібно перевірити. Ось приклад:

int count = 0;

while (count < 5)
{
    Console.WriteLine("Count: " + count);
    count++;
}

У цьому прикладі цикл виконується, доки змінна 'count' не досягне значення 5.

'Do-While'

Цикл 'do-while' схожий на цикл while, але умова перевіряється в кінці, тому цикл виконується принаймні один раз. Ось приклад:

int num = 1;

do
{
    Console.WriteLine("Number: " + num);
    num++;
} while (num <= 5);

У цьому прикладі цикл виконується до тих пір, поки змінна 'num' не буде менше або дорівнюватиме 5.

Функції

Функції дозволяють інкапсулювати повторно використовувані блоки коду. C# підтримує визначення функцій за допомогою ключового слова 'void' для методів, які не повертають значення, та інших типів даних для методів, які повертають значення. Ось приклад:

int Add(int a, int b)
{
    return a + b;
}

void Greet(string name)
{
    Console.WriteLine("Hello, " + name + "!");
}

int result = Add(5, 3);
Greet("Alice");

У цьому прикладі ми визначаємо дві функції: 'Add' і 'Greet'. Функція 'Add' приймає два цілі параметри та повертає їх суму. Функція 'Greet' приймає рядковий параметр і друкує вітальне повідомлення. Потім ми викликаємо ці функції з відповідними аргументами.

Класи та об'єкти

C# є об’єктно-орієнтованою мовою програмування, що означає, що він підтримує створення класів та об’єктів. Класи визначають схему створення об’єктів, які є екземплярами цих класів. Ось приклад:

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public void SayHello()
    {
        Console.WriteLine("Hello, my name is " + Name + " and I'm " + Age + " years old.");
    }
}

Person person = new Person();
person.Name = "John";
person.Age = 30;
person.SayHello();

У цьому прикладі ми визначаємо клас 'Person' з властивостями 'Name' і 'Age' і метод 'SayHello'. Потім ми створюємо екземпляр класу 'Person' за допомогою ключового слова 'new' і встановлюємо його властивості. Нарешті, ми викликаємо метод 'SayHello' для об’єкта 'person'.

Концепції об'єктно-орієнтованого програмування (ООП).

C# — це об’єктно-орієнтована мова програмування, яка надає різні функції для підтримки концепцій ООП, таких як успадкування, інкапсуляція та поліморфізм.

Спадщина

Спадкування дозволяє створювати нові класи на основі існуючих класів, успадковуючи їхні атрибути та поведінку. Ось приклад:

class Shape
{
    public virtual void Draw()
    {
        Console.WriteLine("Drawing a shape.");
    }
}

class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a circle.");
    }
}

У цьому прикладі клас 'Circle' успадковує клас 'Shape' за допомогою символу ':'. Клас 'Circle' замінює метод 'Draw' із базового класу, щоб забезпечити власну реалізацію.

Інкапсуляція

Інкапсуляція — це практика об’єднання даних і методів у класі та керування доступом до них. Ви можете використовувати модифікатори доступу ('public', 'private', 'protected' тощо), щоб визначити видимість учасників. Ось приклад:

class Person
{
    private string name;

    public string GetName()
    {
        return name;
    }

    public void SetName(string newName)
    {
        name = newName;
    }
}

У цьому прикладі поле 'name' інкапсульовано в класі 'Person' і доступ до нього можливий лише через 'GetName' і 'SetName' методи.

Поліморфізм

Поліморфізм дозволяє розглядати об’єкти різних класів як об’єкти загального базового класу. Це дозволяє писати код, який однаково працює з різними типами об’єктів. Ось приклад:

class Animal
{
    public virtual void MakeSound()
    {
        Console.WriteLine("Animal makes a sound.");
    }
}

class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Dog barks.");
    }
}

class Cat : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Cat meows.");
    }
}

У цьому прикладі клас 'Animal' має віртуальний метод 'MakeSound', який перевизначено 'Dog' і 'Cat' класи. Поліморфізм дозволяє розглядати екземпляри 'Dog' і 'Cat' як екземпляри 'Animal' і викликати 'MakeSound' метод на них.

Обробка винятків

Обробка винятків дозволяє витончено обробляти помилки виконання. У C# ви можете використовувати блоки 'try-catch' для перехоплення та обробки винятків. Ось приклад:

try
{
    int result = 10 / 0;
    Console.WriteLine("Result: " + result);
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("Divide by zero error: " + ex.Message);
}
finally
{
    Console.WriteLine("Cleanup code goes here.");
}

У цьому прикладі ми намагаємося виконати ділення на нуль, що видає 'DivideByZeroException'. Код всередині блоку 'try' виконується, і якщо виникає виняткова ситуація, вона перехоплюється блоком 'catch'.

Блок 'finally' виконується незалежно від того, виникає виняток чи ні, і зазвичай використовується для операцій очищення.

Обробка особливих ситуацій допомагає запобігти збоям програм і забезпечує контрольовану обробку помилок і відновлення.

Висновок

Цей вичерпний посібник містить детальний вступ до програмування C#, охоплюючи основи та основні концепції мови. Починаючи з налаштування середовища розробки та написання "Hello, World!" ми досліджували типи даних, змінні, структури потоку керування, такі як оператори if і цикли, а також створення функцій. Ми заглибились у більш просунуті теми, такі як класи, об’єкти, успадкування, інкапсуляція, поліморфізм, а також обробка винятків. Крім того, ми обговорили використання масивів і колекцій для керування кількома значеннями. З цими знаннями тепер ви маєте міцну основу програмування на C#, що дає вам змогу розробляти широкий спектр програм, від консольних до веб- та мобільних програм. Не забувайте продовжувати практикувати та досліджувати величезну екосистему C#, щоб покращити свої навички та відкрити безмежні можливості.