Что C# Использует блок и почему я должен использовать его? [дубликат]

257
задан one noa 29 May 2018 в 00:03
поделиться

7 ответов

Если тип реализует IDisposable, он автоматически располагает его.

Данный:

public class SomeDisposableType : IDisposable
{
   ...implmentation details...
}

Они эквивалентны:

SomeDisposableType t = new SomeDisposableType();
try {
    OperateOnType(t);
}
finally {
    if (t != null) {
        ((IDisposable)t).Dispose();
    }
}

using (SomeDisposableType u = new SomeDisposableType()) {
    OperateOnType(u);
}

второе легче считать и поддержать.

312
ответ дан Lews Therin 23 November 2019 в 02:43
поделиться

Из MSDN:

C#, через общеязыковую среду выполнения (CLR) Платформы.NET, автоматически освобождает память, используемую, чтобы хранить объекты, которые больше не требуются. Выпуск памяти недетерминирован; память освобождена каждый раз, когда CLR решает выполнить сборку "мусора". Однако обычно лучше высвободить ограниченные средства, такие как дескрипторы файлов и сетевые соединения как можно быстрее.

оператор использования позволяет программисту определять, когда объекты, которые используют ресурсы, должны выпустить их. Объект, предоставленный оператору использования, должен реализовать интерфейс IDisposable. Этот интерфейс предоставляет Расположить метод, который должен высвободить средства объекта.

, Другими словами, using оператор говорит.NET выпускать объект, определенный в using блок, как только это больше не необходимо.

41
ответ дан Robert S. 23 November 2019 в 02:43
поделиться

Using вызовы Dispose() после using - блок оставляют, даже если код выдает исключение.

, Таким образом, Вы обычно используете using для классов, которые требуют чистки после них, как IO.

Так, этот блок использования:

using (MyClass mine = new MyClass())
{
  mine.Action();
}

сделал бы то же как:

MyClass mine = new MyClass();
try
{
  mine.Action();
}
finally
{
  if (mine != null)
    mine.Dispose();
}

Используя using путь короче и легче читать.

105
ответ дан MattCan 23 November 2019 в 02:43
поделиться

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

5
ответ дан TheSmurf 23 November 2019 в 02:43
поделиться
using (B a = new B())
{
   DoSomethingWith(a);
}

эквивалентно

B a = new B();
try
{
  DoSomethingWith(a);
}
finally
{
   ((IDisposable)a).Dispose();
}
6
ответ дан Bert Huijben 23 November 2019 в 02:43
поделиться

Это - действительно просто немного синтетического сахара, который не требует, чтобы Вы к вызову explicity Расположили на участниках ту реализацию IDisposable.

2
ответ дан SaaS Developer 23 November 2019 в 02:43
поделиться

Оператор using получает один или несколько ресурсов, выполняет оператор, а затем удаляет ресурс.

2
ответ дан 23 November 2019 в 02:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: