No history yet

Введение в C#

Основы синтаксиса C#

Синтаксис C# во многом похож на синтаксис других языков C-семейства, таких как C++ и Java. Если вы знакомы с ними, вы почувствуете себя как дома. Точка с запятой завершает операторы, а фигурные скобки {} используются для группировки кода в блоки, такие как пространства имен, классы и методы.

Каждое приложение на C# начинается с метода Main. Это точка входа, с которой начинается выполнение программы. Давайте посмотрим на классический пример:

// Импортируем пространство имен System, содержащее основные классы
using System;

// Пространства имен помогают организовать код
namespace HelloWorldApp
{
    // Класс — это шаблон для создания объектов
    class Program
    {
        // Main — точка входа в программу
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
        }
    }
}

Здесь Console.WriteLine() — это метод, который выводит строку текста в консоль. Он находится в классе Console, который, в свою очередь, расположен в пространстве имен System.

Структуры данных

Для эффективной работы с данными в C# есть несколько встроенных структур. Наиболее часто используются массивы, списки и словари.

Массивы имеют фиксированный размер, который определяется при их создании. Они обеспечивают быстрый доступ к элементам по индексу.

// Объявление и инициализация массива целых чисел
int[] numbers = new int[5] { 1, 2, 3, 4, 5 };

// Доступ к элементу по индексу (индексация начинается с 0)
int thirdNumber = numbers[2]; // Получаем число 3

Console.WriteLine(thirdNumber);

Списки (List<T>) более гибкие. Их размер может динамически изменяться по мере добавления или удаления элементов. Они идеально подходят, когда вы заранее не знаете, сколько элементов вам понадобится.

using System.Collections.Generic;

// Создание списка строк
List<string> fruits = new List<string>();

// Добавление элементов
fruits.Add("Apple");
fruits.Add("Banana");

// Удаление элемента
fruits.Remove("Apple");

Словари (Dictionary<TKey, TValue>) хранят пары «ключ-значение». Каждый ключ в словаре должен быть уникальным. Словари обеспечивают очень быстрый поиск значения по ключу.

using System.Collections.Generic;

// Создание словаря для хранения возрастов
Dictionary<string, int> ages = new Dictionary<string, int>();

// Добавление пар ключ-значение
ages["Alice"] = 30;
ages["Bob"] = 25;

// Получение значения по ключу
int aliceAge = ages["Alice"]; // Получаем 30

Принципы ООП в C#

C# — это объектно-ориентированный язык программирования (ООП). Это означает, что он построен вокруг концепции «объектов», которые объединяют данные (поля или свойства) и поведение (методы). Основные принципы ООП полностью поддерживаются в C#.

Lesson image

Инкапсуляция

noun

Объединение данных и методов, которые с ними работают, внутри одного «объекта» и сокрытие внутренней реализации от внешнего мира. Доступ контролируется с помощью модификаторов, таких как public (доступен всем) и private (доступен только внутри класса).

Наследование

noun

Механизм, который позволяет одному классу (дочернему) перенимать свойства и методы другого класса (родительского). Это способствует повторному использованию кода.

Полиморфизм

noun

Способность объектов с разной реализацией отвечать на один и тот же вызов метода. В C# это часто реализуется через переопределение методов (используя ключевые слова virtual и override) или через интерфейсы.

public class Animal
{
    public virtual void MakeSound()
    {
        Console.WriteLine("Some generic animal sound");
    }
}

public class Dog : Animal // Наследование
{
    public override void MakeSound() // Полиморфизм (переопределение)
    {
        Console.WriteLine("Woof!");
    }
}

// Использование
Animal myDog = new Dog();
myDog.MakeSound(); // Выведет "Woof!"

Обработка исключений и работа с файлами

В реальных приложениях вещи могут пойти не так: файл может не существовать, сеть может быть недоступна. C# предоставляет механизм обработки исключений для корректной работы с такими ситуациями. Для этого используется конструкция try-catch-finally.

  • try: Блок кода, в котором может произойти ошибка.
  • catch: Блок, который выполняется, если в блоке try произошло исключение определенного типа.
  • finally: Блок, который выполняется всегда, независимо от того, было исключение или нет. Обычно используется для освобождения ресурсов.

Давайте объединим это с работой с файлами. Пространство имен System.IO предоставляет классы для чтения и записи в файлы.

using System.IO;

string filePath = @"C:\temp\MyTest.txt";

try
{
    // Попытка прочитать все строки из файла
    string content = File.ReadAllText(filePath);
    Console.WriteLine(content);
}
catch (FileNotFoundException ex)
{
    // Этот блок выполнится, если файл не найден
    Console.WriteLine("Error: The file was not found.");
    Console.WriteLine(ex.Message);
}
catch (Exception ex)
{
    // Этот блок перехватит любые другие исключения
    Console.WriteLine("An unexpected error occurred.");
    Console.WriteLine(ex.Message);
}
finally
{
    // Этот код выполнится в любом случае
    Console.WriteLine("Finished file reading attempt.");
}

Это были основные строительные блоки C#. Понимание этих концепций — синтаксиса, структур данных, принципов ООП и обработки ошибок — является ключом к написанию надежного и поддерживаемого кода.