.NET Cry | Трещу за айтишку
29 subscribers
1 photo
2 links
Просто рассказываю про то, с чем я сталкиваюсь каждый день)

Связь: @dimainnature
Download Telegram
Это первый мой пост и я решил немного рассказать про ключевые слова async и await

Async

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

Код как сделать метод асинхронным и заставить компилятор неявно сгенерировать в IL коде машину состояний:

public async Task Foo
{

}


Await

Используется в качестве точки синхронизации. При помощи этого ключевого слова мы явно указываем, что конкретно в этом месте мы хотим получить результат асинхронной операции.
Channel name was changed to «.NET Cry | Трещу за айтишку»
Немного про конструкторы, какие бывают, как устроены

Понятие

Это специальный метод класса, который вызывается при создании объекта этого класса.
Их используют для инициализации объектов. Имеют то же имя, что и класс и не имеют возвращаемого типа, даже void.

Как он может выглядеть в коде:

public class Person // Создаем класс Person, который содержит только целочисленный идентификатор
{

public int Id { get; private set; }

public Person(int id) // Сам параметризованный конструктор
{
Id = id;
}

}


Как будет выглядеть вызов:

var id = 123;

var person = new Person(id);


Выглядит достаточно просто, однако это не всё)
Также существуют статические конструкторы и конструкторы по-умолчанию.

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

Вызываются они один раз перед созданием объекта, (т.е. перед вызовом обычного конструктора) или обращению к любому из статических членов.
Сделано именно так, поскольку данный вид конструкторов привязывается к типу объекта и вызывается неявно самой CLR. 🙂

Статический конструктор будет выглядеть следующим образом в коде.

static Person()
{

}

Следует обратить внимание, что у него нет модификатора доступа, потому что этот конструктор вызывается неявно
И по той же причине нельзя добавить собственные входные параметры)

Несколько кейсов для которых целесообразно использовать статический конструктор:

1. Если необходимо выполнить инициализацию статических полей
2. Если необходимо выполнить какие-то операции для инициализации ресурсов,
которые будут использованы всеми экземплярами класса

Конструкторы по-умолчанию

Тут все одновременно очень просто, но не обошлось без нюансов)
При объявлении нового класса - внутри него уже присутствует пустой конструктор без параметров)

Нюанс состоит в том, если мы объявим собственный конструктор, то тот пустой конструктор, который генерировался компилятором неявно - просто исчезнет.
Это не проблема, мы можем ручками его дописать. Просто надо помнить, что в классе всегда присутствует какой-нибудь конструктор.
Однако, этот "какой-нибудь конструктор" не всегда может быть доступен и тут есть ещё второй нюанс или трюк, как хотите называйте)

Нас никто не ограничивает в создании приватного конструктора:

private Person()
{

}


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

Однако магию вне Хогвардса в виде использования механизма рефлексии нам ещё не запрещали использовать.
Но в нашем случае может просто добавить публичный конструктор?)


Несколько кейсов для которых целесообразно использовать приватный конструктор:

1. Реализация паттерна Singleton
2. Если класс является контейнером для данных и не предполагается создание его экземпляров
3. Реализация фабричных методов

#ЭтоБаза #НаСобесеТочноСпросят
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Программист, почему не на дорожке?)
Please open Telegram to view this post
VIEW IN TELEGRAM