Библиотека шарписта | C#, F#, .NET, ASP.NET
21.7K subscribers
2.89K photos
45 videos
91 files
5.35K links
Все самое полезное для C#-разработчика в одном канале.

Наши курсы: https://clc.to/y3LDtw

По рекламе: @proglib_adv

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
Почему приватный виртуальный метод нельзя переопределить

Кажется, что virtual и private должны просто работать вместе. Один говорит «этот метод можно переопределить», другой говорит «этот метод виден только внутри класса».

Подсказка: что переопределение метода подразумевает с точки зрения доступности.

Ответ: в нашем канале по подготовке к собесу

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱17🌚1
Что выведет код с картинки

💡 Подсказка: обратите внимание на конструкцию when. Это не просто синтаксический сахар.

➡️ А ответ тут

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
👋 Небольшой вопрос для прокачки

Это классика технических интервью в C#:
Статический конструктор — когда именно его вызывает рантайм


Вы не пишете new MyClass(), не обращаетесь к объекту, не делаете вообще ничего явного. А он всё равно срабатывает.

➡️ Узнайте ответ

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
7😁1
🔥 Вопрос с собеса

Представьте: продакшн .NET Core сервис под высокой нагрузкой. Задержки растут, потоки блокируются, DBA смотрит на вас с подозрением. БД вроде бы ни при чём.. или всё же при чём?

Что вы будете делать?

Если знаете — пишите в комментариях 👇 Если хотите проверить себя — ответ уже ждёт вас здесь

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Вопрос с собеседования по C#

Как работают асинхронные делегаты и зачем они нужны?


Если вы думаете про async/await — это совсем другая история. Здесь механизм старше и ближе к ручному управлению потоками.

Попробуйте сформулировать ответ сами, а потом сверьтесь 👇

➡️ Ответ

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41
Что на самом деле запрещает ref struct в C#
 
ref struct появился не просто как ограниченная версия обычного struct. За этим стоит конкретная гарантия компилятора о том, где может находиться такой тип в памяти.
 
Подумайте: что произойдёт, если попробовать передать ref struct в лямбду, сохранить в поле класса или сделать boxing?
 
➡️ Правильный ответ

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1
📢 Навигация по каналу

Чтобы не теряться в потоке постов, собрали удобную навигацию по рубрикам:

#sharp_view — короткие и полезные посты с кодом, best practices, фишки C#, сравнение подходов, code snippets и разбор багов

#il_люминатор — глубокие технические разборы: архитектурные паттерны, производительность, устройство .NET, CLR, GC, JIT и сложные концепции

#async_news — релизы .NET, обновления IDE, анонсы конференций, дайджесты и другие важные новости экосистемы

#entry_point — опросы, холивары, вопросы подписчикам, истории из практики и обсуждения с сообществом

#dotnet_challenge — задачи по C# и .NET, вопросы с собеседований, поиск ошибок в коде и интерактивные викторины

#схема — инфографика, диаграммы, шпаргалки, дорожные карты и визуальное объяснение сложных тем

#garbage_collector — мемы, юмор и забавные истории из жизни .NET-разработчиков

🔈 Используйте рубрики для быстрого поиска интересующих материалов и не пропускайте новые публикации.

🐸 Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
7
🧩 Разбор задачи

Правильный ответ: Будет выброшен InvalidOperationException

Многие ожидают, что новый элемент просто добавится в список и цикл продолжит работу. Но внутри foreach используется Enumerator, который запоминает версию коллекции на момент начала обхода.

После выполнения:

users.Add(4);


версия списка изменяется.

➡️ При следующем вызове MoveNext() Enumerator обнаруживает, что коллекция была изменена после начала обхода, и выбрасывает исключение:

System.InvalidOperationException: Collection was modified; enumeration operation may not execute.


Исключение возникает не в момент Add(), а при попытке перейти к следующему элементу коллекции.

Например, такой код:


{
Console.WriteLine(user);

if (user == 2)
users.Add(4);
}


успеет вывести:

1
2


и только после этого завершится с ошибкой.

💡 Это поведение характерно не только для List<T>, но и для большинства коллекций .NET, включая Dictionary<TKey, TValue>, HashSet<T> и другие.

Если во время обхода нужно изменять коллекцию, используйте цикл for, работайте с копией через ToList() или накапливайте изменения отдельно.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
👍84👾2
🧩 Разбор задачи

Правильный ответ: 10

Многие ожидают увидеть 20, но здесь есть важная деталь:

Counter — это struct, а значит значимый тип (value type).


Когда выполняется:


var c2 = c1;


создаётся не ссылка на объект, а полная копия структуры.

После этой строки в памяти фактически находятся два независимых экземпляра:


c1 -> Value = 10 c2 -> Value = 10


Затем меняется только копия:


c2.Value = 20;


Теперь состояние выглядит так:


c1 -> Value = 10 c2 -> Value = 20


Поэтому вывод будет: 10

💡 Это одно из ключевых отличий struct от class.

Для сравнения, если бы Counter был классом:


public class Counter
{
public int Value;
}


то после:


var c2 = c1;


обе переменные ссылались бы на один и тот же объект, и результатом был бы уже 20.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱15👍3❤‍🔥1
🤔 Что выведет этот код?


double a = 0.1 + 0.2;

Console.WriteLine(a == 0.3);
Console.WriteLine(a);


👇 Пишите свои варианты в комментариях.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱9😁72
Правильный ответ к задаче:

False
0.30000000000000004

Почему:

Тип double использует стандарт IEEE 754 и хранит числа в двоичном формате. Значения 0.1 и 0.2 нельзя представить в нём точно, поэтому после сложения получается число, немного отличающееся от 0.3.

Если нужна точная работа с десятичными дробями (например, денежные расчёты), используйте decimal.

А значения типа double сравнивайте с допуском:

Math.Abs(a - b) < epsilon

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
😁73🥰3🥱3