🎨 Графическое программирование на C#

← Вернуться к модулю 1

Урок 1.1: Основы C# и .NET

Модуль 1 ⏱️ ~1-1.5 часа

📌 Ключевые моменты этого урока:

  • .NET Framework — это платформа для разработки приложений с единой средой выполнения (CLR)
  • C# — язык программирования, работающий на платформе .NET
  • Структура проекта включает точку входа (Program.cs) и формы для графического интерфейса
  • Типы данных определяют, какие значения может хранить переменная (int, string, bool и т.д.)
  • Классы и объекты — основа объектно-ориентированного программирования в C#

Создание проекта в Visual Studio

Прежде чем начать программировать, нужно создать проект в Visual Studio. Это первый шаг к созданию любого приложения.

Запуск Visual Studio:

Запуск Visual Studio

Окно запуска Visual Studio

Шаг 1: Выбор типа проекта

Выбор типа проекта

Окно выбора типа проекта

ВАЖНО: Выберите "Windows Forms App (.NET Framework)" — НЕ выбирайте "Windows Forms App" (это .NET Core/6+)

Шаг 2: Настройка нового проекта

Настройка нового проекта

Окно настройки нового проекта

Советы по именованию:

  • Используйте PascalCase (первая буква заглавная)
  • Избегайте пробелов и спецсимволов
  • Используйте описательные имена (MyGraphicsApp, а не App1)

Шаг 3: Структура созданного проекта

Структура созданного проекта

Интерфейс Visual Studio после создания проекта

Вы видите:

  • Слева: Toolbox (компоненты) и Solution Explorer (файлы)
  • В центре: Дизайнер форм с пустой формой Form1
  • Справа: Окно свойств (Properties)
  • Внизу: Вкладки для вывода, ошибок и т.д.

Быстрый старт: первая настройка

Первая настройка

Настройка свойств формы

Сразу после создания проекта:

  1. Измените свойства формы через окно Properties:
    • (Name): MainForm
    • Text: "Мое первое приложение"
    • Size: 800, 600
    • StartPosition: CenterScreen
    • BackColor: White
  2. Сохраните проект: Ctrl+Shift+S — сохранить все
  3. Запустите приложение: F5 — запустить с отладкой
  4. Остановите приложение: Shift+F5 — остановить отладку

Что такое .NET Framework

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

Почему .NET важен для графического программирования?

Графическое программирование требует работы с системными ресурсами, управления памятью и взаимодействия с операционной системой. .NET обеспечивает:

  • Управление памятью — автоматическая очистка неиспользуемых объектов (garbage collection)
  • Единую платформу — одинаковый код работает на разных версиях Windows
  • Богатую библиотеку — готовые классы для работы с графикой (GDI+, WPF)
  • Безопасность — контроль доступа к системным ресурсам

Основные компоненты .NET:

  • CLR (Common Language Runtime) — среда выполнения, которая управляет выполнением кода. Именно CLR переводит ваш код в команды процессора и следит за ресурсами.
  • BCL (Base Class Library) — базовые классы и типы данных, необходимые для любого приложения
  • FCL (Framework Class Library) — расширенная библиотека классов для специфических задач (графика, тестирование, сеть и т.д.)

Архитектура .NET:

Архитектура .NET

Процесс компиляции и выполнения кода в .NET

Структура C# проекта

При создании приложения Windows Forms вы получаете структурированный набор файлов. Каждый файл имеет свое назначение:

Структура C# проекта

Структура проекта в Solution Explorer

MyProject/
├── Program.cs          // Точка входа приложения (где всё начинается)
├── Form1.cs            // Основная форма (логика интерфейса)
├── Form1.Designer.cs   // Дизайнер формы (автоматически генерируется)
├── Form1.resx          // Ресурсы (изображения, значки и т.д.)
├── Properties/
│   └── AssemblyInfo.cs // Информация о сборке
├── bin/                // Скомпилированный код (exe, dll файлы)
└── obj/                // Промежуточные файлы компиляции

Program.cs — точка входа приложения:

Это главный файл вашего приложения. Здесь находится метод Main(), который запускается в первую очередь. Именно отсюда загружается основная форма.

Program.cs — точка входа приложения

Файл Program.cs с точкой входа приложения

using System;
using System.Windows.Forms;

namespace MyProject
{
    static class Program
    {
        // [STAThread] указывает на потокобезопасность для интерфейса
        [STAThread]
        static void Main()
        {
            // Включить стили визуального оформления (кнопки, текстбоксы выглядят как в Windows)
            Application.EnableVisualStyles();

            // Совместимость с разными версиями Windows
            Application.SetCompatibleTextRenderingDefault(false);

            // Запустить главное окно приложения
            Application.Run(new Form1());
        }
    }
}

Что происходит при запуске приложения:

  1. CLR начинает выполнение метода Main()
  2. EnableVisualStyles() настраивает внешний вид элементов управления
  3. Application.Run(new Form1()) создает и показывает главное окно
  4. Приложение работает, реагируя на события пользователя
  5. Когда закрывается главное окно, приложение завершает работу

Основные типы данных

В C# типы данных определяют, какой тип информации может хранить переменная. Это критически важно для графического программирования, где вам нужно работать с координатами, цветами и параметрами объектов.

Примитивные типы данных:

// Целые числа
int x = 100;              // 32-битное целое число (-2 млрд до 2 млрд)
short width = 50;         // 16-битное число (меньше диапазон, но быстрее)
long fileSize = 999999;   // 64-битное число (для огромных чисел)

// Числа с плавающей точкой (для координат и расчетов)
float rotation = 45.5f;   // 32-битное (добавьте 'f' в конце)
double angle = 3.14159;   // 64-битное (более точное)

// Логические и текстовые значения
bool isVisible = true;    // true или false
char symbol = 'A';        // Один символ
string message = "Hello"; // Строка текста

// Цвета и структуры
System.Drawing.Color red = System.Drawing.Color.Red;
System.Drawing.Point center = new System.Drawing.Point(400, 300);

Почему это важно для графики:

  • int используется для координат (x, y), размеров и индексов
  • double/float для углов поворота, масштабирования и вычислений расстояний
  • Color для работы с цветами элементов
  • Point, Size, Rectangle — специальные структуры для геометрии

Примеры использования в графике:

// Координаты прямоугольника
int left = 50, top = 50, width = 200, height = 100;

// Цвет RGB (красный = 255, зеленый = 0, синий = 0)
Color myColor = Color.FromArgb(255, 0, 0); // Красный цвет

// Точка на экране
Point startPoint = new Point(100, 50);

// Размер (используется для окон и фигур)
Size formSize = new Size(800, 600);

// Прямоугольник (положение + размер)
Rectangle drawArea = new Rectangle(10, 10, 780, 580);

Классы и объекты

Класс — это шаблон (чертёж) для создания объектов. Объект — это конкретный экземпляр этого класса с его собственными данными. Это фундаментальная концепция объектно-ориентированного программирования.

Аналогия из реальной жизни:

  • Класс = Чертёж дома (описание, как он должен выглядеть)
  • Объект = Конкретный дом на улице Ленина (построенный по чертежу)
  • Свойства = Характеристики дома (цвет, высота, кол-во окон)
  • Методы = Действия, которые может делать дом (открывать двери, светить окнами)

Пример класса для графического программирования:

// Определение класса — это шаблон
public class Rectangle
{
    // Свойства — характеристики объекта
    public int X { get; set; }        // X координата
    public int Y { get; set; }        // Y координата
    public int Width { get; set; }    // Ширина
    public int Height { get; set; }   // Высота
    public Color FillColor { get; set; } // Цвет заливки
    
    // Конструктор — метод создания объекта
    public Rectangle(int x, int y, int width, int height)
    {
        X = x;
        Y = y;
        Width = width;
        Height = height;
        FillColor = Color.Blue;
    }
    
    // Методы — действия, которые может делать объект
    public int GetArea()
    {
        return Width * Height;
    }
    
    public void Move(int newX, int newY)
    {
        X = newX;
        Y = newY;
    }
    
    public void Resize(int newWidth, int newHeight)
    {
        Width = newWidth;
        Height = newHeight;
    }
}

// Создание объектов (экземпляров класса)
Rectangle rect1 = new Rectangle(10, 10, 100, 50);
Rectangle rect2 = new Rectangle(150, 100, 200, 75);

// Работа с объектом
int area = rect1.GetArea();           // Получить площадь = 5000
rect1.Move(50, 50);                  // Переместить
rect1.FillColor = Color.Red;         // Изменить цвет
rect1.Resize(150, 100);              // Изменить размер

Почему классы важны в графике:

  • Вы можете создать класс для рисуемой фигуры, хранящий её свойства (позиция, размер, цвет)
  • Методы класса могут выполнять действия (нарисовать, переместить, изменить размер)
  • Легко работать с множеством объектов одного типа (массивом прямоугольников, кругов и т.д.)
  • Код становится организованным и переиспользуемым

Частые ошибки начинающих:

// ❌ НЕПРАВИЛЬНО: не забывайте ключевое слово new
Rectangle rect;                  // объект не создан!
// rect.GetArea();              // ошибка — NullReferenceException

// ✅ ПРАВИЛЬНО:
Rectangle rect = new Rectangle(0, 0, 100, 100);
int area = rect.GetArea();       // работает правильно

// ❌ НЕПРАВИЛЬНО: путаница между class (шаблон) и object (конкретный экземпляр)
// Rectangle — это класс (шаблон)
// rect — это объект (конкретный экземпляр класса Rectangle)

// ✅ ПРАВИЛЬНО:
class Shape { }          // это класс (шаблон)
Shape shape = new Shape(); // shape — это объект/экземпляр

Best Practices:

  • Всегда используйте свойства для доступа к данным — это позволяет менять внутреннюю реализацию без изменения остального кода
  • Выделите понять логику класса — если класс делает слишком много, разделите его на несколько классов
  • Используйте говорящие имена — Rectangle лучше, чем Rect или R
  • Добавляйте конструкторы — они помогают создавать объекты с правильными начальными значениями

Практическое задание

Задание 1: Создание первого проекта

  1. Запустите Visual Studio
  2. Нажмите "Создать новый проект"
  3. В строке поиска введите "Windows Forms App"
  4. Выберите "Windows Forms App (.NET Framework)"
  5. Укажите имя проекта: "MyFirstGraphicsApp"
  6. Выберите расположение для сохранения проекта
  7. Нажмите "Создать"
  8. Дождитесь загрузки Visual Studio и появления дизайнера форм

Задание 2: Изучение интерфейса Visual Studio

  1. Изучите структуру проекта в Solution Explorer (Ctrl+Alt+L)
  2. Найдите и откройте Toolbox (Ctrl+Alt+X)
  3. Откройте окно свойств (F4)
  4. Переключитесь между Дизайнером (Shift+F7) и Кодом (F7)
  5. Попробуйте изменить размер формы, перетаскивая её края

Задание 3: Настройка формы

  1. В Дизайнере форм выделите форму (кликните по ней)
  2. В окне Properties измените следующие свойства:
    • (Name): MainForm
    • Text: "Мое первое приложение"
    • Size: 800, 600
    • StartPosition: CenterScreen
    • BackColor: LightBlue
  3. Сохраните проект (Ctrl+Shift+S)
  4. Запустите приложение (F5)
  5. Убедитесь, что форма отображается по центру экрана с новыми настройками
  6. Закройте приложение

Задание 4: Программная настройка формы

  1. Перейдите к коду формы (F7)
  2. Найдите конструктор MainForm()
  3. Добавьте следующий код после InitializeComponent():
    public MainForm()
    {
        InitializeComponent();
    
        // Настройка формы программно
        this.Text = "Мое первое приложение";
        this.Size = new Size(600, 400);
        this.StartPosition = FormStartPosition.CenterScreen;
        this.BackColor = Color.White;
    }
  4. Убедитесь, что в начале файла есть using System.Drawing;
  5. Запустите приложение (F5) и проверьте результат

Задание 5: Изучение файлов проекта

  1. В Solution Explorer откройте файл Program.cs
  2. Изучите метод Main() — точку входа приложения
  3. Откройте файл Form1.Designer.cs (не редактируйте!)
  4. Посмотрите на метод InitializeComponent()
  5. Разверните папку Properties и откройте AssemblyInfo.cs
  6. Измените версию сборки и перекомпилируйте проект (Ctrl+Shift+B)
💡 Совет: Используйте горячие клавиши для быстрой работы: F5 — запуск, Shift+F5 — остановка, Ctrl+S — сохранить, Ctrl+Shift+S — сохранить все.

Проверка знаний

Ответьте на вопросы, чтобы проверить, насколько хорошо вы усвоили материал:

1. Какой шаблон проекта нужно выбрать для создания Windows Forms приложения?
  • Windows Forms App (.NET Framework)
  • Console App
  • Class Library
  • WPF Application
2. Что такое CLR в .NET Framework?
  • Библиотека базовых классов
  • Язык программирования
  • Среда выполнения, которая управляет выполнением кода
  • Инструмент разработки
3. Какой метод является точкой входа в C# приложении?
  • Start()
  • Main()
  • Run()
  • Begin()
4. В каком файле находится точка входа приложения Windows Forms?
  • Form1.cs
  • Form1.Designer.cs
  • Program.cs
  • AssemblyInfo.cs
5. Какая горячая клавиша запускает приложение с отладкой?
  • F5
  • F4
  • F7
  • F9
6. Какое свойство формы задает заголовок окна?
  • Name
  • Caption
  • Text
  • Title
7. Какое значение StartPosition разместит форму по центру экрана?
  • Manual
  • CenterScreen
  • WindowsDefaultLocation
  • CenterParent
8. Какое свойство формы задает цвет фона?
  • ForeColor
  • BorderColor
  • BackgroundColor
  • BackColor
9. Какой тип данных используется для хранения целых чисел в C#?
  • int
  • float
  • string
  • bool
10. Что такое объект в C#?
  • Шаблон для создания классов
  • Метод класса
  • Экземпляр класса
  • Переменная