Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Классы в C#: определение, конструкторы, деструкторы, статические члены

Что такое класс

Класс — это чертеж (blueprint) для создания объектов. Определяет, из чего состоит объект (поля/свойства) и что он может делать (методы). Объекты — экземпляры класса. Члены класса: поля, свойства, методы, конструкторы, деструкторы, события, индексаторы, операторы.

Объявление класса

<модификатор_доступа> class ИмяКласса
{
    // Поля
    <модификатор> <тип> поле1;
    
    // Свойства
    <модификатор> <тип> Свойство { get; set; }
    
    // Методы
    <модификатор> <возврат> Метод(параметры) { ... }
    
    // Конструкторы
    <модификатор> ИмяКласса(параметры) { ... }
    
    // Деструктор
    ~ИмяКласса() { ... }
}

По умолчанию: класс — internal, члены — private. Доступ к членам через точку: obj.Метод().

Пример: класс Box

public class Box
{
    public double Length;
    public double Breadth;
    public double Height;
    
    public double GetVolume() => Length * Breadth * Height;
}

Box box1 = new Box();
box1.Length = 6; box1.Breadth = 7; box1.Height = 5;
Console.WriteLine(box1.GetVolume()); // 210

Инкапсуляция через свойства

Поля делают private, доступ — через публичные свойства/методы:

public class Box
{
    private double length;
    private double breadth;
    private double height;

    public double Length { get => length; set => length = value; }
    public double Breadth { get => breadth; set => breadth = value; }
    public double Height { get => height; set => height = value; }

    public double GetVolume() => length * breadth * height;
}

Конструкторы

Специальный метод, вызываемый при создании объекта (new ClassName()). Имя = имени класса, нет типа возврата.

Конструктор по умолчанию (parameterless)

public class Line
{
    private double length;
    
    public Line()
    {
        Console.WriteLine("Object created");
        length = 0;
    }
}

Параметризованный конструктор

public Line(double len)
{
    Console.WriteLine($"Object created, length = {len}");
    length = len;
}

// Использование
Line line = new Line(10.0); // length = 10

Конструкторы и инициализация

Деструкторы (Finalizers)

Метод очистки, вызываемый сборщиком мусора (GC) перед удалением объекта. Имя = ~ClassName. Нет параметров, модификаторов, не может быть вызван явно.

~Line()
{
    Console.WriteLine("Object deleted");
    // Освобождение неуправляемых ресурсов
}

Важно: В современном C# вместо деструкторов используют паттерн IDisposable / IAsyncDisposable и using для детерминированного освобождения ресурсов. Деструктор — запасной вариант (safety net).

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

static — член принадлежит классу, а не экземпляру. Существует в единственном экземпляре.

Статические поля

public class Counter
{
    public static int Count = 0; // одна копия на все экземпляры
    
    public Counter() => Count++;
}

var c1 = new Counter();
var c2 = new Counter();
Console.WriteLine(Counter.Count); // 2 (доступ через класс)

Статические методы

public class MathUtils
{
    public static int Add(int a, int b) => a + b;
}

int sum = MathUtils.Add(5, 3); // вызов через класс

Статические методы могут обращаться ТОЛЬКО к статическим членам.

Статические конструкторы

static MyClass()
{
    // Инициализация статических полей
    // Вызывается один раз перед первым доступом к классу
}

Класс vs Struct — краткое резюме

Язык C

  1. Классы и объекты в C#: Фундаменты надёжного ООП
  2. Модификаторы доступа в C#: public, private, protected, internal и другие
  3. Ключевое слово static в C#: статические переменные, методы и классы
  4. Абстрактные классы и методы в C#: практическое руководство
  5. Вложенные классы в C#: определение, использование и наследование
  6. Классы и объекты в C++: практическое руководство по объектно-ориентированному программированию
  7. Классы хранения в C: auto, register, static, extern — область видимости и время жизни
  8. Классы хранения в C++: область видимости, время жизни и использование
  9. Интерфейсы в C++: абстрактные классы и чисто виртуальные функции
  10. Структура программы на C#: основные компоненты и пример Hello World