main() | c#, patterns & stuff – Telegram
main() | c#, patterns & stuff
158 subscribers
28 photos
1 video
1 link
💻 Канал про паттерны проектирования и любопытные особенности .NET

📖 Контент:
- .NET C#
- паттерны проектирования
- принципы программирования,
- GIT
- тесты, шутки, прибаутки

🤝 Сотрудничество:
tg: @ilyailleya
email: ilya.lee@outlook.com
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
💣 Development vs. Production

Как система ведёт себя при тестировании vs как она ведёт себя у заказчика 🤣

#humor
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4👏1
Какого модификатора доступа не существует в C#?
Anonymous Quiz
33%
private protected
13%
internal protected
53%
private internal
🤷‍♂2👍1😱1💊1
🧐 Что такое CTS?

CTS (Common Type System) расшифровывается как общая система типов — это полное описание всех типов данных и всех программных конструкций, поддерживаемых CLR.
Все фундаментальные типы данных .NET определены в сборке mscorlib.dll

При этом под типом данных обычно понимается что либо из следующего набора:
⚪️ класс
⚪️ интерфейс
⚪️ структура
⚪️ перечисление
⚪️ делегат

#net_basics

👍 Если и так всё знал,
🔥 Если ты Вий, и тебе подняли веки,
👀 Если зашёл просто посмотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2👀1
🧐 Какое ключевое слов нужно ввести в Visual Studio для создания автоматического свойства?
Anonymous Quiz
18%
Proper Twelve
73%
prop
9%
property
0%
Mr. Proper
👍2🔥2
🧐 Фиксация зависимостей

Фиксация зависимостей — указание конкретного семейства пакетов для одной версии .NET без дополнительных спецификаторов, таких как
🔘 бета-версии (beta1)
🔘 релиз-кандидаты (rc4)
🔘 подстановочные символы ( * )

Пример фиксированной зависимости:

<ItemGroup>
<PackageReference
Include="Microsoft.EntityFrameworkCore.Sqlite"
Version="6.0.0" />
</ItemGroup>


Пример нефиксированных зависимостей, которых лучше избегать:

<PackageReference Include="System.NET.Http" Version="4.1.0-*" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3-beta1" />


#net_basics

👍 Если и так всё знал,
🔥 Если ты Вий, и тебе подняли веки,
👀 Если зашёл просто посмотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍2🥰1
Какой модификатор определяет необходимость установки свойства во время создания объекта?
Anonymous Quiz
29%
readonly
43%
required
14%
retired
14%
что за дичь
🔥1🥰1🤬1
🧐 0.1 + 0.2 ≠ 0.3?
Такое случается с лучшими из нас


👉 Как известно, в .NET есть три наиболее распространённых типа данных для хранения вещественных чисел — float, double и decimal.
Как-то так повелось, что чаще всего в приложениях используется тип double. Особенно если вы не задумываетесь о количестве оперативной памяти на стороне клиента.

❗️Диапазон типа double просто лютый — от ±5.0 × 10^(−324) до ±1.7 × 10^308. Количество разрядов после десятичного разделителя — не сосчитать.
Но если вы напишете следующий код:

double a = 0.1;
double b = 0.2;
if (a + b == 0.3)
Console.WriteLine("true");
else
Console.WriteLine("false");


то к своему удивлению можете обнаружить, что результат будет false.


Почему же?
Всё дело в том, как компьютер хранит в памяти числа с плавающей запятой.
Если десятичное число можно однозначно представить в виде двоичного числа (перевести в двоичную систему счисления без потери точности), то проблем со сравнением чисел не будет.

❗️ Но если десятичное число не может быть однозначно представлено в двоичной системе, то и оператор сравнения выдаст некорректный результат.

‼️ Например, число 12.75 будет представлено в двоичной системе как 1100.1100.
А вот число 0.1 должно быть представлено как 0.000(1100), где скобки означают бесконечное повторение этих четырёх чисел. Но поскольку невозможно хранить бесконечное число, оно в какой-то момент обрезается, что и приводит к потере точности.
А потому 0.1 + 0.2 уже не будет в точности равно 0.3.

🔖 Поэтому — если в приложении/классе/методе требуется точное сравнение вещественных (дробных) чисел, тип decimal — ваш бро.


ℹ️ Экскурс в историю
Кстати, с использованием оператора равенства при сравнении чисел двойной точности случился очень неприятный казус. Во время войны в Персидском заливе американский противоракетный комплекс Patriot был запрограммирован с использованием чисел двойной точности с плавающей запятой (тех самых double). Неточность в расчётах привела к тому, что комплекс не смог перехватить иракскую ракету Р-17, и та попала в американские казармы в городе Дхарам.

Так что погроммирование — это то ещё искусство.


👍 Если и так всё знал (да ладно, не заливайте, я вот не знал),
🔥 Если ты Вий, и тебе подняли веки,
👀 Если зашёл просто посмотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2🥰1🦄1
🧐 Различия Visual Studio Community, Professional & Enterprise Edition

Различия основных версий среды разработки Visual Studio.

🔖 Community — бесплатная версия, отсутствует CodeLens, используется для проектов с открытым кодом, в учебных учреждениях и на малых предприятиях.

🔖 Professional — лицензируется для крупномасштабной разработки.

🔖 Enterprise — полный фарш. Говорят, она даже выплачивает ипотеку.

#vs

👍 Если и так всё знал,
🔥 Если ты Вий, и тебе подняли веки,
👀 Если зашёл просто посмотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1🥰1👀1🦄1😎1
🧐 Как называется компилятор C#? Вопрос с подвохом, любители "кинематографа" — не ошибитесь 🤣
Anonymous Quiz
28%
Roselin 🤔
17%
Gosling 🤣
11%
Josephine 🤣
33%
Roslyn 😂
11%
Rosalyn 😏
🤡2🔥1🥰1🦄1😎1
🧐 CLI (Common Language Infrastructure)

CLI (Common Language Infrastructure) — спецификация общеязыковой инфраструктуры.
Эта спецификация даёт возможность создавать дистрибутивы платформы .NET для других операционных систем и процессоров.

❗️Дайте мне знать в комментах, когда и, главное, кому эта информация пригодится.

#net_basics

👍 Если и так всё знал,
🔥 Если ты Вий, и тебе подняли веки,
👀 Если зашёл просто посмотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍1🥰1🦄1😎1
🧐 Как называется группа семантически связанных типов, которые содержатся в одной или нескольких связанных сборках?
Anonymous Quiz
61%
пространство имён
22%
пространство типОв
0%
пространство пространств
0%
пространство гильберта
17%
автор, отдохни
👍1🥰1👏1
🧐 Сборки

Сборка — двоичный модуль (EXE, DLL), содержащий управляемый код на промежуточном языке и метаданные типов.
Промежуточный язык — он же IL (Intermediate Language).
Он же MSIL - Microsoft IL.
Он же CIL - Common IL.


🔖 Закрытые сборки — содержатся в каталоге приложения, о них знает только это приложение.
🔘 Определяются по дружественному имени.
🔘 Могут находится в подкаталогах, тогда их местоположение прописывается в конфиг файле App.config с помощью тегов assemblyBinging->probing->privatePath.


🔖 Разделяемые сборки — могут использоваться разными приложениями на одном компьютере.

#net_basics


👍 Если и так всё знал,
🔥 Если ты Вий, и тебе подняли веки,
👀 Если зашёл просто посмотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1🥰1🤔1🦄1
🧐 Какое ключевое слово используется для разделения кода класса по разным файлам?
Anonymous Quiz
10%
splitted
65%
partial
10%
segregate
15%
divided
👍1🔥1🥰1👏1🦄1
🧐 CLR vs CTS vs CLS

Если вкратце, всё это — компоненты одной системы.
Их отношение друг к другу можно описать в терминах множеств/подмножеств следующим образом:
CLR
{
CTS
{
CLS
}
}


То есть, CLR содержит CTS, которая содержит CLS.
Ниже — подробнее о каждом из этим компонентов.


🔖 CLR (Common Language Runtime)
— общеязыковая исполняющая среда; набор служб, требующихся для выполнения скомпилированного кода.

CLR отвечает за:
🔘 обнаружение,
🔘 загрузку
🔘 управление объектами .NET.

CLR управляет памятью, потоками, базовыми проверками безопасности. 

При обращении к типу CLR выполняет действия:
1️⃣ находит сборку,
2️⃣ находит запрошенный тип в двоичном модуле путём чтения метаданных,
3️⃣ размещает тип в памяти,
4️⃣ компилирует CIL код в машинный код (инструкции CPU),
5️⃣ выполняет проверки безопасности,
6️⃣ выполняет код.


🔖 CTS (Common Type System)
— общая система типов; полное описание всех типов данных и всех программных конструкций, поддерживаемых CLR.


🔖 CLS (Common Language Specification)
— общеязыковая спецификация; подмножество CTS, в котором описан необходимый минимум, который должны поддерживать все языки программирования (и компиляторы) для .NET. 

#net_basics

👍 Если и так всё знал,
🔥 Если ты Вий, и тебе подняли веки,
👀 Если зашёл просто посмотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
👏2🔥1🥰1
Какое ключевое слово используется для проверки совместимости и возвращает true/false?
Anonymous Quiz
18%
as 🤨
53%
is 🤨
9%
at 🤨
21%
wtf 🤨
👍1🥰1👏1
Оператор vs выражение SWITCH

Начиная с C# 8.0, длинный и многословный оператор switch с этими дурными case'ами break'ами можно заменить на выражение switch
Выглядит это следующим образом:

int j = 100;
int i = j switch
{
1 => 10,
2 => 20,
3 => 30,
_ => 100
};


Здесь case и break заменяются операторм лямбды (=>), а ветвь default заменяется символом нижнего подчёркивания

#operators


👍 Если и так всё знал,
🔥 Если ты Вий, и тебе подняли веки,
👀 Если зашёл просто посмотреть
🔥6👍2🥰1👏1👀1🦄1
Какой класс применяется для чтения данных из текстового файла?
Anonymous Quiz
28%
StringReader
17%
TextReader
55%
StreamReader
👍2🔥2🥰1🦄1
🧐 0.1 + 0.2 ≠ 0.3?
Такое случается


👉 Как известно, в .NET есть три наиболее распространённых типа данных для хранения вещественных чисел — float, double и decimal.
Как-то так повелось, что чаще всего в приложениях используется тип double. Особенно если вы не задумываетесь о количестве оперативной памяти на стороне клиента.

❗️Диапазон типа double просто лютый — от ±5.0 × 10^(−324) до ±1.7 × 10^308. Количество разрядов после десятичного разделителя — не сосчитать.
Но если вы напишете следующий код:

double a = 0.1;
double b = 0.2;
if (a + b == 0.3)
Console.WriteLine("true");
else
Console.WriteLine("false");


то к своему удивлению можете обнаружить, что результат будет false.


Почему же?
Всё дело в том, как компьютер хранит в памяти числа с плавающей запятой.
Если десятичное число можно однозначно представить в виде двоичного числа (перевести в двоичную систему счисления без потери точности), то проблем со сравнением чисел не будет.

❗️ Но если десятичное число не может быть однозначно представлено в двоичной системе, то и оператор сравнения выдаст некорректный результат.

‼️ Например, число 12.75 будет представлено в двоичной системе как 1100.1100.
А вот число 0.1 должно быть представлено как 0.000(1100), где скобки означают бесконечное повторение этих четырёх чисел. Но поскольку невозможно хранить бесконечное число, оно в какой-то момент обрезается, что и приводит к потере точности.
А потому 0.1 + 0.2 уже не будет в точности равно 0.3.

🔖 Поэтому — если в приложении/классе/методе требуется точное сравнение вещественных (дробных) чисел, тип decimal — ваш бро.


ℹ️ Экскурс в историю
Кстати, с использованием оператора равенства при сравнении чисел двойной точности случился очень неприятный казус. Во время войны в Персидском заливе американский противоракетный комплекс Patriot был запрограммирован с использованием чисел двойной точности с плавающей запятой (тех самых double). Неточность в расчётах привела к тому, что комплекс не смог перехватить иракскую ракету Р-17, и та попала в американские казармы в городе Дхарам.

Так что погроммирование — это то ещё искусство.


👍 Если и так всё знал (да ладно, не заливайте, я вот не знал),
🔥 Если ты Вий, и тебе подняли веки,
👀 Если зашёл просто посмотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3🥰1👀1
Можно ли объявить поле класса типа var?
Anonymous Quiz
33%
Да
61%
Нет
6%
Наверное
👍3🔥1👏1
Свойства в языке C#

В сущности, свойство это замена set/get методов. В свойствах используется лексема value - это контекстное ключевое слово языка

Можно выделить пару базовых рекомендаций по использованию свойства:

1️⃣ Для установки и получения данных всегда рекомендуется использовать свойства, в том числе везде внутри определения класса.

2️⃣ Не рекомендуется писать много кода с аксессорах set и get. При необходимости правильнее выносить этот код в отдельную функцию, которую вызывать из самого аксессора.

#properties


👍 Если и так всё знал,
🔥 Если ты Вий, и тебе подняли веки,
👀 Если зашёл просто посмотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1