самой частый объект которые создаётся в языке в нем объявляются:

  • переменные
  • свойства
  • методы

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

Конструктор

public class MyClass
{

}

у каждого класса есть конструктор если не указывать его явно то будет использовать по умолчанию пустой конструктор но можно и объявить его явно

public class MyClass
{
	public MyClass()
	{
		
	}
}

во внутрь скобок можно передавать параметры для инициализации объекта

public class MyClass
{
	private int _initNum;
	public MyClass(int initNum)
	{
		_initNum = initNum;
	}
}

также можно объявлять несколько конструкторов это называется перегрузкой

Первичный Конструктор

также есть первичный конструктор

public class MyClass(int num)
{

}

в этом случаю этот конструктор становится основным и последующие конструктор должны вызываться через него через слово this

public class MyClass(int num)
{
	private int _initNum;
	private string _name;
	public MyClass(int initNum, string name) : this(initNum)
	{
		_initNum = initNum;
		_name = name;
	}
	public MyClass() : this(0)
	{

	}
}

также что интересно первичный конструктор также создаёт переменные

public class MyClass(string name)
{
	//сдесь за кулисами создаётся private readonly string name;
}

что позволяет не создавая явно перемены обращается к ним

Создание нового экземпляра класса

MyClass myClass = new MyClass();   // полная форма
MyClass myClass = new();           // сокращённая

Экземпляры создаются через new(). В скобках через запятую передаются параметры — они зависят от выбранного конструктора.

Ключевые слова для классов

abstract — абстрактный

public abstract class MyClassBase
{
	public abstract void AbstractMethod()
}

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

public class MyClass : MyClassBase
{
    public override void AbstractMethod()
    {
        // реализация
    }
}

Все абстрактные методы должны быть реализованы в наследнике (если наследник тоже не абстрактный).

Что интересно: абстрактные методы ведут себя как virtual — их можно переопределять в наследниках, но в абстрактном классе у них нет реализации.

Объявление у них такое:

MyClassBase myClass = new MyClass();   // нужно явно укзать наследника

partial — частичный

// Файл 1
public partial class MyClass
{
    public void MethodA() { }
}
// Файл 2
public partial class MyClass
{
    public void MethodB() { }
}
public abstract partial class MyClassBase
{
	public abstract void AbstractMethod()
}

Это делает класс частичным — его можно разбить на несколько файлов. Главное, чтобы имена типов совпадали.

В основном нужно для генераторов кода (например, Windows Forms, WPF, Source Generators).

sealed — запечатанный

public sealed class MyClass
{
	
}

Не даёт возможности наследоваться от этого класса.

Плюс: для sealed классов компилятор может делать оптимизации (виртуальные вызовы не нужны).

static — статический static

public static class MyClass
{
	
}

Такой класс не имеет конструкторов (экземпляры создать нельзя), и от него нельзя наследоваться.

Чаще всего в нём пишут:

  • утилиты / вспомогательные методы
  • методы расширения (extension methods)
  • константы / общие настройки
Built with LogoFlowershow