Eek Ten Bears Ответов: 3

Каково назначение блок using в C# синтаксис объяснение пожалуйста


Я иногда кодирую на C#. Я только что обнаружил синтаксис .NET4, называемый блоком USING, так что, например, приведенный ниже код работает, но я не знаю, что такое using БЛОКИ для. Гуглить не очень продуктивно, так что ребята, пожалуйста, дайте быстрое ясное объяснение или ссылку.

Пример:
   using (
   MailMessage message = new MailMessage
   {
       To = { new MailAddress("you@yourdomain.com", "you") },
       Sender = new MailAddress("robot@mydomain.com", "my auto sender"),
       From = new MailAddress("robot@mydomain.com", "same auto sender"),
       Subject = ".net Testing",
       Body = "Testing .net emailing",
       IsBodyHtml = true,
   }
)
   {
       using (
          SmtpClient smtp = new SmtpClient
          {
              Host = "smtp.office365.com",
              Port = 587,
              Credentials = new System.Net.NetworkCredential("robot@mydomain.com", "IncrediblySecurePassword"),
              EnableSsl = true
          }
       )
       {
           try { smtp.Send(message); }
           catch (Exception excp)
           {
               Console.Write(excp.Message);
               Console.ReadKey();
           }
       }
   }
(это исправленная версия кода от ShaneLS в StackOverFlow)

Ради тех, кто хочет использовать этот код, используйте ДИРЕКТИВА вам нужно добавить это
using System.Net.Mail;


Что я уже пробовал:

Я пробовал гуглить, но не могу найти правильную комбинацию ключевых слов, чтобы получить что-то полезное, кроме того, что входит в комплект .NET4

3 Ответов

Рейтинг:
23

OriginalGriff

Некоторые предметы-это дефицитные ресурсы, с ними нужно правильно обращаться, и как только они больше не нужны, им нужно сказать: "закройте все, что вы открыли, и выбросьте себя". Как правило, эти объекты реализуют IDisposable: и Вы можете вызвать Dispose на них, чтобы активировать деструктор, чтобы закрыть их и освободить все ресурсы.

То using блок помогает в этом: он делает две очень удобные вещи.
1) Когда код арендует using блок любыми средствами - то есть обычными средствами, такими как падение на строку после блока, возврат из метода или с помощью исключения, система автоматически вызовет Dispose для вас - это как неявное finally блок а try- если хотите.

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

using (MyClass ImOKInsideTheBlock = new MyClass())
   {
   ImOKInsideTheBlock.DoSomething(); // Fine.
   } // ImOKInsideTheBlock Disposed here.
ImOKInsideTheBlock.DoSomething(); // Compiler error as ImOKInsideTheBlock is no longer in scope.


Рейтинг:
17

TheRealSteveJudge

Вот ты где: C# using statement - почему и как?[^]


Рейтинг:
0

Phil J Pearson

погуглите его[^]