JavaRush /Курсы /C# SELF /Структура типичной программы на C#

Структура типичной программы на C#

C# SELF
8 уровень , 1 лекция
Открыта

1. Программа — как офис, полный отделов

Когда вы только знакомитесь с программированием, кажется, что можно просто писать код строчка за строчкой, и все будет работать. Но как только программа чуть усложняется, в голове начинается путаница: где что находится, зачем это написано, а если надо поменять одну строчку — где она вообще лежит?..

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

Представьте себе компанию. В ней есть отдел кадров, бухгалтерия, IT-отдел, отдел логистики и так далее. У каждого отдела — своя зона ответственности, свои сотрудники и задачи.

В программе на C# каждый такой “отдел” — это класс. Один класс отвечает, например, за работу с пользователями, другой — за подсчёты, третий — за работу с файлами.

Вот типичная структура простого проекта:

  • Program.cs — главный офис: здесь находится “точка входа”, откуда всё начинается.
  • User.cs — отдел, где хранятся и обрабатываются данные о пользователе.
  • Calculator.cs — отдел вычислений.
  • FileHelper.cs — специалисты по файлам.

Даже в совсем маленькой программе обычно есть хотя бы один класс. А большие проекты — это уже целый “небоскрёб” из сотен классов!

2. Класс — это коробка с инструментами

C# — это объектно-ориентированный язык и все в нем является объектами. Типы объектов называют классами.

Класс — это как коробка или шкафчик, в который мы складываем нужные нам вещи: переменные, методы, свойства. Представьте коробку с надписью “Молотки”: внутри лежат только инструменты, связанные с молотками.

class Example
{
    // Тут будут наши инструменты: переменные, методы, свойства
}
Объявление класса в C#

Классы обычно содержат переменные и функции. В 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(":)");
}
Top-level statement: код без класса

C# компилятор преобразует его в такой:

using System;

class Program
{
    static void Main()			// ваш код
    {
        WriteSmile();
        WriteSmile();
        WriteSmile();        
    }

    static void WriteSmile()	//ваша собственная функция
    {
        Console.WriteLine(":)");
    }
}
Как компилятор преобразует top-level statement в класс

Если вы поняли только половину лекции, ничего страшного: главное, чтобы вы суть уловили. В ближайших лекциях мы разберем по шагам все, что тут написано.

2
Задача
C# SELF, 8 уровень, 1 лекция
Недоступна
Создание простого класса с полем и методом
Создание простого класса с полем и методом
2
Задача
C# SELF, 8 уровень, 1 лекция
Недоступна
Класс с несколькими методами
Класс с несколькими методами
Комментарии (4)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
jotuo Уровень 8
15 декабря 2025
Кстати,да : 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; } } Где использование в main() ну или как вы там называете точку входа? Ах да, забыл - пацаны разберутся сами, все-все, молчу
jotuo Уровень 8
15 декабря 2025
Might be я не прав и в будущих лекциях вы расскажете по подробнее, но сейчас вот этот код : class Person { private int age; // переменная (поле) класса public int Age // свойство Age. хранит данные в переменной класса age. { get { return age; } // метод get - вызывается, когда кто-то пробует получить значение Age set // метод Set - вызывается, когда кто-то пробует изменить значение Age { if (value >= 0) age = value; } } } Вызывает просто максимум недоумений, а можно было еще меньше пояснений дать? Дать код без всего - чуваки там сам разберутся дальше, зачем стараться то? +- было бы эквивалентно тому уровню информации, что сейчас написана вами в уроке. В общем, очень слабая подача здесь, господа.
Илья Уровень 9
8 августа 2025
Во второй задаче в ТЗ не указано, что класс "MathOperations" должен быть объявлен вне класса "Program", но из-за этого проверка не проходит. И хотя это нигде принципиально не описано (в том числе в описании ошибки), прошёл вывод суммы и произведения только в формате $"текст{переменная}", а вариант "текст + переменная выдавал ошибку
Николай Уровень 18
18 августа 2025
Хз, все с первого раза проходит.