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



этот вопрос уже есть ответ здесь:




  • Что такое использование "using" в C#

    29 ответов



какова цель использования блока в C#? Чем она отличается от локальной переменной?

1097   9  

9 ответов:

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

дано:

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

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

SomeDisposableType t = new SomeDisposableType();
try {
    OperateOnType(t);
}
finally {
   t.Dispose();
}

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

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

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 путь короче и легче читать.

от MSDN:

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

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

иными словами,using заявление рассказывает .Net, чтобы освободить объект, указанный в элементе using блок, как только он больше не нужен.

оператор using используется для работы с объектом в C#, который реализует IDisposable интерфейс.

The IDisposable интерфейс имеет один открытый метод называется Dispose который используется для удаления объекта. Когда мы используем оператор using, нам не нужно явно избавляться от объекта в коде, оператор using заботится об этом.

using (SqlConnection conn = new SqlConnection())
{

}

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

SqlConnection conn = new SqlConnection() 
try
{

}
finally
{
    // calls the dispose method of the conn object
}

дополнительные Подробнее читайте: понимание оператора' using ' в C#.

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

Также обратите внимание, что экземпляр объекта создается через using доступно только для чтения в блоке using. Обратитесь к официальной ссылке C#здесь.

using (B a = new B())
{
   DoSomethingWith(a);
}

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

B a = new B();
try
{
  DoSomethingWith(a);
}
finally
{
   ((IDisposable)a).Dispose();
}

Это действительно просто какой-то синтаксический сахар, который не требует от вас явного вызова Dispose для членов, реализующих IDisposable.

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

Comments

    Ничего не найдено.