1. Программа — как офис, полный отделов
Когда вы только знакомитесь с программированием, кажется, что можно просто писать код строчка за строчкой, и все будет работать. Но как только программа чуть усложняется, в голове начинается путаница: где что находится, зачем это написано, а если надо поменять одну строчку — где она вообще лежит?..
Поэтому C#, как и большинство современных языков, предлагает нам способ “раскладывать” код по полочкам, чтобы в любой момент можно было понять, что делает программа, и быстро найти нужное место.
Представьте себе компанию. В ней есть отдел кадров, бухгалтерия, IT-отдел, отдел логистики и так далее. У каждого отдела — своя зона ответственности, свои сотрудники и задачи.
В программе на C# каждый такой “отдел” — это класс. Один класс отвечает, например, за работу с пользователями, другой — за подсчёты, третий — за работу с файлами.
Вот типичная структура простого проекта:
- Program.cs — главный офис: здесь находится “точка входа”, откуда всё начинается.
- User.cs — отдел, где хранятся и обрабатываются данные о пользователе.
- Calculator.cs — отдел вычислений.
- FileHelper.cs — специалисты по файлам.
Даже в совсем маленькой программе обычно есть хотя бы один класс. А большие проекты — это уже целый “небоскрёб” из сотен классов!
2. Класс — это коробка с инструментами
C# — это объектно-ориентированный язык и все в нем является объектами. Типы объектов называют классами.
Класс — это как коробка или шкафчик, в который мы складываем нужные нам вещи: переменные, методы, свойства. Представьте коробку с надписью “Молотки”: внутри лежат только инструменты, связанные с молотками.
class Example
{
// Тут будут наши инструменты: переменные, методы, свойства
}
Классы обычно содержат переменные и функции. В C# переменные класса принято называть полями, а функции класса — методами. Но смысл от этого не меняется.
Помните наш первый код?
Console.WriteLine("Всем привет!");
string name = Console.ReadLine();
В этом коде есть и класс и методы:
- Console — это класс, который содержит методы (функции) для работы с консолью.
- WriteLine — это метод класса Console, который выводит текст на экран.
- ReadLine — это метод класса Console, который читает ввод с клавиатуры.
Все программирование в некотором роде сводится к написанию своих классов и методов, которые вызывают методы других классов.
3. Поля (переменные) класса — это его память
Внутри класса можно хранить переменные (их часто называют “поля”). Это как ячейки памяти, куда мы складываем какие-то данные.
class Counter
{
int value; // поле — тут будет храниться текущее значение счётчика Counter
}
Поля позволяют классу что-то помнить между вызовами разных методов. Например, считать, сколько раз нажали на кнопку.
Полей может быть сколько угодно. Пример:
class User
{
int id; // уникальный номер пользователя
string name; // имя пользователя
int age; // возраст
string adress; // адрес
User[] children; // дети
}
4. Методы — действия, которые может выполнять класс
Методы — это “умения” нашего класса. Если класс — сотрудник, то методы — это его навыки: что он умеет делать.
- Метод может вывести что-то на экран.
- Посчитать сумму двух чисел.
- Принять данные “на вход” и вернуть результат.
Строение метода:
- Тип возвращаемого значения (например, void — если ничего не возвращает, или int — если возвращает число)
- Имя метода (например, Print)
- Параметры в скобках (может быть пусто)
- Фигурные скобки { ... } — тело метода
class Printer
{
public void PrintHello()
{
Console.WriteLine("Hello!");
}
public int Add(int a, int b)
{
return a + b;
}
}
Подробнее о методах и всех связанных с ними нюансах вы узнаете в ближайших лекциях.
5. Свойства — умные переменные
Свойство (property) — это как “прокачанная” переменная: она не просто хранит значение, но и может что-то делать при получении или изменении значения.
Пример из жизни: вы не можете просто так взять и изменить зарплату сотрудника — бухгалтер проверит, всё ли правильно. Вот и свойство может “проверять” данные:
class Person
{
private int age; // переменная (поле) класса
public int Age // свойство Age. хранит данные в переменной класса age.
{
get { return age; } // метод get - вызывается, когда кто-то пробует получить значение Age
set // метод Set - вызывается, когда кто-то пробует изменить значение Age
{
if (value >= 0)
age = value;
}
}
}
Код в методе set не даст установить отрицательный возраст. Подробнее мы разберем свойства в ближайших лекциях.
6. Модификаторы доступа
В C# можно определять, какие части класса доступны из других классов, а какие остаются только для внутренних нужд. Для этого используются модификаторы доступа. Если перед именем поля, метода или класса написано ключевое слово public , то к нему можно обратиться из любого места программы.
Если же перед именем поля, метода или класса написано ключевое слово private, то к нему можно обратиться только из его же класса. Другие классы не будут видеть это поле или метод. Как будто их и нет вовсе.
- public — видно всем. Такие методы и свойства можно использовать из других классов.
- private — видно только внутри самого класса. Это внутренние детали, которые не должны быть доступны другим.
class Demo
{
public int OpenValue; // видно снаружи
private int secretValue; // видно только внутри
public void ShowOpen() { Console.WriteLine(OpenValue); }
private void HideSecret() { Console.WriteLine(secretValue); }
}
Золотое правило: поля обычно делают private, а наружу “выносят” только нужные методы и свойства (public).
7. Как выглядит реальный класс
Вот “собранный” пример — мини-калькулятор:
class Calculator
{
private int result; // поле для хранения результата
public int Result
{
get { return result; }
private set { result = value; } // доступ только внутри класса
}
public void Add(int a, int b)
{
result = a + b;
}
public void Clear()
{
result = 0;
}
}
Такой подход встречается почти во всех современных C#-программах!
8. Top-level statements
Вообще-то в C# весь код всегда находится в классах. Класс — это минимальная единица программы. В программе может быть много классов, но минимум — один.
Подождите-ка, а как же весь тот код, который мы только что писали, ведь там не было никаких классов?!
А это одна из новомодных фишек языка C#: можно написать код без класса, а C#-компилятор сам переделает его в класс.
Допустим у вас есть такой код в Program.cs:
// ваш код
WriteSmile();
WriteSmile();
WriteSmile();
//ваша собственная функция
void WriteSmile()
{
Console.WriteLine(":)");
}
C# компилятор преобразует его в такой:
using System;
class Program
{
static void Main() // ваш код
{
WriteSmile();
WriteSmile();
WriteSmile();
}
static void WriteSmile() //ваша собственная функция
{
Console.WriteLine(":)");
}
}
Если вы поняли только половину лекции, ничего страшного: главное, чтобы вы суть уловили. В ближайших лекциях мы разберем по шагам все, что тут написано.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ