JavaRush /Курсы /C# SELF /Синтаксис объявления класса и его структура

Синтаксис объявления класса и его структура

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

1. Общая структура объявления класса

Итак, представьте: класс в C# — это чертёж здания. В чертеже мы описываем, сколько комнат, какой цвет стен, где стоят двери и окна. В классе — какие у объекта есть свойства (например, имя, возраст) и что он умеет делать (например, "поздороваться", "попросить зарплату").

Объявление класса всегда содержит три основных блока:

  1. Модификатор доступа (public, private, internal, protected) — кто может пользоваться этим классом. Для простоты сейчас будем использовать public, чтобы класс был "виден" везде.
  2. Ключевое слово class — чтобы компилятор понял, что мы действительно описываем класс.
  3. Имя класса — с большой буквы, по конвенции.
  4. Тело класса в фигурных скобках — тут описываем всё, из чего состоит наш класс: поля, свойства, методы.

Схематично это выглядит так:

public class ИмяКласса
{
    // Здесь будут поля, свойства и методы класса
}
Объявление класса в C#

Пример: Класс студента

public class Student
{
    // Поля (переменные, принадлежащие объекту)
    public string Name;
    public int Age;
}

Пока что этот класс — как пустая коробка: мы описали, что студенту полагается имя и возраст, но ничему ещё не научили его.

2. Поля класса (fields)

Поля — это переменные, которые принадлежат объекту класса. Например, у каждого студента должно быть своё имя и свой возраст — поэтому они описываются как поля:

public class Student
{
    public string Name;
    public int Age;
}

Теперь, когда вы создаёте объект типа Student, у каждого объекта будет своё собственное имя и возраст.

Пример создания объекта:

Student sasha = new Student();
sasha.Name = "Саша";
sasha.Age = 20;

Здесь мы создали объект sasha, а потом отдельно присвоили его полям значения. Такой подход используют для самого простого старта (про конструкторы мы очень подробно поговорим на следующей лекции).

3. Методы класса (functions)

Методы — это "глаголы" объекта, то есть его поведение. Действия, которые он умеет совершать. Например, студент может поздороваться. Для этого описывается метод внутри класса:

public class Student
{
    public string Name;
    public int Age;

    public void SayHello()
    {
        Console.WriteLine($"Привет, меня зовут {Name}, мне {Age} лет!");
    }
}

Теперь каждый студент может "поздороваться" — причём будет использовать собственное имя и возраст.

Пример использования метода:

Student sasha = new Student();
sasha.Name = "Саша";
sasha.Age = 20;
sasha.SayHello(); // Выведет: Привет, меня зовут Саша, мне 20 лет!

4. Свойства класса (properties)

Свойства — это "умные" поля, у которых можно задать особые действия при чтении или записи значения. В современном C# свойства используются чаще, чем поля, потому что они дают больше контроля и гибкости. Это как электричество: кажется, что просто, а возможностей — море.


public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
}
Объявление свойств класса

Здесь get; set; создают автоматически поле, но позволяют в будущем добавить логику при изменении значения. Для пользователя класса свойства выглядят почти так же как поля.

Пример:

Student katya = new Student();
katya.Name = "Катя";
katya.Age = 18;
Console.WriteLine(katya.Name); // Катя

Подробнее про свойства класса — в следующих лекциях :P

5. Комментарии

Скучная, но важная тема! Как и в остальном коде, внутри класса можно и нужно писать комментарии, чтобы объяснять, зачем нужно то или иное поле, или метод:

public class Student
{
    // Имя студента
    public string Name { get; set; }
    
    // Возраст студента (в годах)
    public int Age { get; set; }

    // Студент здоровается
    public void SayHello()
    {
        Console.WriteLine($"Привет, меня зовут {Name}, мне {Age} лет!");
    }
}

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

6. Модификаторы доступа

Модификаторы доступа — почти как двери с разными замками. Они определяют, кто и откуда может обращаться к членам класса. Основные модификаторы:

  • public: доступно везде (наш случай по умолчанию).
  • private: доступно только внутри этого класса.
  • internal: доступно в пределах текущей сборки (проекты, библиотеки).
  • protected: доступно внутри класса и его наследников.

Пример для поля, которое скрыто от внешнего мира:

public class Student
{
    private int age; // Только внутри Student
    public string Name { get; set; }

    public void SetAge(int value)
    {
        if (value > 0)
            age = value;
    }

    public int GetAge()
    {
        return age;
    }
}

На ранних этапах часто все члены объявляют public, чтобы не путаться, но в реальных проектах это плохая практика: некоторые детали реализации лучше скрыть.

7. Статические члены класса

Иногда у класса есть такие данные или методы, которые принадлежат не отдельному объекту, а всему классу сразу. Это — статические члены (static members).

Например: мы хотим вести общий счётчик студентов.

public class Student
{
    public static int StudentsCount = 0;

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

Доступ к статическому члену осуществляется через имя класса:

Student.StudentsCount = 0;

У каждого объекта свои свойства/поля, а вот статические — общие на всех. В примере выше, если у нас 10 студентов, у каждого своё Name, но StudentsCount — один на всех.

8. Пример: Полный класс студента (версия с методами)

Давайте соберём всё вместе и создадим класс студента, который всё умеет и правильно оформлен:

public class Student
{
    // Статический счетчик студентов - относится ко всем студентам
    public static int Count = 0;

    // Имя и возраст - свойства
    public string Name { get; set; }
    public int Age { get; set; }

    // Конструктор (про конструкторы — в следующей лекции)
    public Student(string name, int age)
    {
        Name = name;
        Age = age;
        Count++; // Каждый раз при создании объекта увеличиваем счетчик
    }

    // Метод для приветствия
    public void SayHello()
    {
        Console.WriteLine($"Привет! Я {Name}. Мне {Age} лет.");
    }
}

Использование в основном приложении:

class Program
{
    static void Main()
    {
        Student sasha = new Student("Саша", 20);
        Student katya = new Student("Катя", 22);

        sasha.SayHello();
        katya.SayHello();

        Console.WriteLine($"Всего студентов: {Student.Count}");
    }
}

9. Организация кода: один файл = один класс

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

Student.cs
|
|__ public class Student

А в основном файле программы (Program.cs) — точка входа и основной код. Это облегчает навигацию по проекту, особенно когда классов становится много.

10. Типичные ошибки при работе с классами и объектами

Ошибка №1: забыли фигурные скобки или написали их не там.
Компилятор тут же выдаст ошибку, но не всегда понятно, в чём дело. Особенно если скобки уехали в длинной конструкции — найти, где всё сломалось, бывает непросто.

Ошибка №2: объявили два класса с одинаковым именем в одном пространстве имён.
Такой "креатив" компилятор не одобрит. И хорошо — иначе вы бы сами не разобрались, к какому классу обращаетесь.

Ошибка №3: случайно дали полю то же имя, что и свойству.
Это создаёт путаницу при обращении к членам класса. Даже опытные разработчики иногда хватаются за голову: "Это я к полю или к свойству обращаюсь?"

Ошибка №4: не указали модификатор доступа.
По умолчанию класс становится internal, и если вы пишете библиотеку — это может неожиданно ограничить доступ к классу снаружи.

Ошибка №5: обращение к статическим членам через экземпляр.
Если написать student.Count вместо Student.Count, компилятор может и не запретить, но это сбивает с толку. Так вы как будто говорите, что Count относится к конкретному студенту, а на самом деле — ко всем сразу.

2
Задача
C# SELF, 16 уровень, 1 лекция
Недоступна
Добавление метода к классу
Добавление метода к классу
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ