Профессор Си
2.92K subscribers
97 photos
2 videos
118 links
Уроки, советы, новости C#.


@anothertechrock
@aldrson
Download Telegram
Вопрос на засыпку. В чем разница между stack и heap?

Ответ опубликуем завтра.

Пишите в комментариях ваш вариант!

#questions
🤮4🤝1
В чем разница между stack и heap?

Ответ:

В stack хранятся типы значений (типы, унаследованные от System.ValueType), а в heap – ссылочные типы (типы, унаследованные от System.Object).

Можно сказать, что stack отвечает за отслеживание того, что на самом деле выполняется и где находится каждый выполняющийся поток (каждый поток имеет свой собственный стек). Heap, с другой стороны, отвечает за хранение данных, или, более точно, объектов.

#questions
👎9👍3🤡2💩1
Вопрос на засыпку. Что такое отложенное выполнение и немедленное выполнение в LINQ? Приведите примеры.

Ответ опубликуем завтра.

Пишите в комментариях ваш вариант!

#questions
👍3
Что такое отложенное и немедленное выполнение в LINQ?

Ответ:

В LINQ отложенное выполнение означает, что запрос не выполняется в указанное время. В частности, это достигается путем присвоения запроса переменной. При этом определение запроса сохраняется в переменной, но запрос не выполняется до тех пор, пока переменная запроса не будет итерирована.

Например:

DataContext productContext = new DataContext();

var productQuery = from product in productContext.Products
where product.Type == "SOAPS"
select product; // запрос не выполняется

foreach (var product in productQuery) // запрос выполняется здесь
{
Console.WriteLine(product.Name);
}

Немедленное выполнение запроса полезно, например, если база данных часто обновляется, и в логике программы важно, чтобы результаты, к которым обращаются, были возвращены в той точке вашего кода, где был задан запрос. Немедленное выполнение часто вызывается с помощью таких методов, какAverage, Sum, Count, List, ToList или ToArray.

Например:

DataContext productContext = new DataContext();

var productCountQuery = (from product in productContext.Products
where product.Type == "SOAPS"
select product).Count(); // запрос выполняется здесь

#questions
🤡71
Вопрос на засыпку. Что такое сборщик мусора и как он работает?

Приведите пример кода, показывающий, как можно обеспечить сборку мусора в .NET

Ответ опубликуем завтра.

Пишите в комментариях ваш вариант!

#questions
💩2👎1🤡1
Вопрос на засыпку. Что такое boxing и unboxing? Приведите пример.

Ответ опубликуем завтра.

Пишите в комментариях ваш вариант!

#questions
👍1
Что такое сборщик мусора и как он работает?

Ответ:

Сборка мусора – это низкоприоритетный процесс, который служит в качестве автоматического менеджера памяти, управляющего распределением и освобождением памяти для приложений.

Каждый раз, когда создается новый объект, среда выполнения общего языка выделяет память для этого объекта из управляемой кучи. Пока в управляемой куче есть свободное пространство памяти, среда выполнения продолжает выделять место для новых объектов. Однако память не бесконечна, и как только приложение заполняет пространство, в дело вступает сборщик мусора (Garbage Collector), который освобождает часть памяти.

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

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

System.GC.Collect();

#questions
👍4
Вопрос на засыпку. В чем разница между интерфейсом и абстрактным классом в .NET?

Ответ опубликуем вечером.

Пишите в комментариях ваш вариант!

#questions
В чем разница между интерфейсом и абстрактным классом в .NET?

Ответ:

Интерфейс просто объявляет поведение, которым должны обладать реализующие классы. Он объявляет только свойства, методы и события без модификаторов доступа. Все объявленные члены должны быть реализованы.

Абстрактный класс предоставляет частичную реализацию функциональности и некоторые абстрактные/виртуальные члены, которые должны быть реализованы сущностями, которые наследуют класс. Он также объявляет поля.

Интерфейс и абстрактный класс не могут быть инстанцированы.

#questions
Вопрос на засыпку. В чем разница между constant и readonly?

Ответ опубликуем вечером.

Пишите в комментариях ваш вариант!

#questions
🤡8🥰1👏1
В чем разница между constant и readonly?

Ответ:

constant и readonly имеют много общего, но есть некоторые важные различия:

1. constant оценивается во время компиляции, в то время как readonly оценивается во время выполнения.
2. constant поддерживает только переменные типа значения (единственным исключением являются строки), в то время как readonly может содержать переменные ссылочного типа.
3. constant следует использовать, когда значение не меняется во время выполнения, а readonly используется в основном тогда, когда фактическое значение неизвестно до выполнения.
4. readonly может инициализироваться только во время объявления или в конструкторе.

#questions
👍5
Что означают следующие аббревиатуры в .NET: IL, CIL, MSIL, CLI и JIT?

Ответ:

IL (Intermediate Language)
– это независимый от процессора частично скомпилированный код. Код IL будет скомпилирован в родной машинный код с использованием текущих свойств среды компилятором Just-In-Time (JIT). JIT-компилятор переводит IL-код в код сборки и использует архитектуру процессора целевой машины для выполнения приложения .NET.

В .NET язык IL называется Common Intermediate Language (CIL), а на первых этапах .NET он назывался Microsoft Intermediate Language (MSIL).

CLI (Common Language Infrastructure) – это открытая спецификация, разработанная компанией Microsoft. Это библиотека скомпилированного кода, используемая для развертывания, создания версий и обеспечения безопасности.

В .NET существует два типа CLI: сборки процессов (EXE) и сборки библиотек (DLL). Сборки CLI содержат код на языке CIL, и, как уже упоминалось, при компиляции языков программирования CLI исходный код транслируется в код CIL, а не в объектный код, специфичный для платформы или процессора.

Подведем итоги:

1. При компиляции исходный код сначала транслируется в IL (в .NET это CIL, а ранее назывался MSIL).
2. Затем CIL собирается в байткод и создается сборка CLI.
3. Перед выполнением кода CLI-код проходит через JIT-компилятор среды выполнения для генерации родного машинного кода.
4. Процессор компьютера выполняет родной машинный код.


#questions
👏6🔥4