2017-01-29 1 views
1

두려면 SmtpClient 및은 MailMessage이는 IDisposable 그래서 내가 바로 문을 사용하거나 첫 번째 사용하여 문이 필요하다 (2)를 사용하여 그 일을하고이나는 C# using 문에 관해서는 올바르게하고 있나?

using (SmtpClient smtpClient = new SmtpClient("xxx", 587)) 
{ 
    smtpClient.Credentials = new System.Net.NetworkCredential("email", "pass"); 
    smtpClient.EnableSsl = true; 

    using (MailMessage mail = new MailMessage()) 
    { 
     mail.Subject = "subject"; 
     mail.From = new MailAddress("email", "name"); 
     mail.To.Add(new MailAddress("email")); 
     mail.Body = "body"; 
     mail.IsBodyHtml = true; 

     smtpClient.Send(mail); 
    } 
} 

처럼 내 코드를 만드는 생각 구현?

덕분에 여러 using 문을 갖는 본질적으로 아무 문제가 없습니다

+3

둘 다 처리해야하는 경우 두 가지 모두에 '사용'이 필요합니다. –

+0

사용 후 폐기해야하는 구체적인 이유가없는 한, 둘 중 하나를 가질 필요가 없습니다 (해당 방법/클래스가 폐기 될 때 폐기됩니다). 즉, using의 중첩이 다소 중복 됨 – Enfyve

+3

바로 위의 설명이 잘못되었으므로 무시해야합니다. –

답변

1

using 문을 중첩, 그것은 들여 쓰기없이 그것을 할 더 관용적 : 당신은 가끔 제 using 두 번째 사이에 어떤 처리를 할 필요가 있기 때문에

using (SmtpClient smtpClient = new SmtpClient("xxx", 587)) 
using (MailMessage mail = new MailMessage()) 
{ 
    smtpClient.Credentials = new System.Net.NetworkCredential("email", "pass"); 
    smtpClient.EnableSsl = true; 

    mail.Subject = "subject"; 
    mail.From = new MailAddress("email", "name"); 
    mail.To.Add(new MailAddress("email")); 
    mail.Body = "body"; 
    mail.IsBodyHtml = true; 

    smtpClient.Send(mail); 
} 

이 항상 가능하지 않다. 그것은 당신의 예제에서 작동합니다.

+0

덕분에 코드가 더 좋아 보이네 –

+0

일단 사용 블록이 끝나면 'using'문을 사용하여 인스턴스화 된 모든 객체 (예 : smtpClient)도 삭제됩니다. –

+1

@HeeroYuy 네, 절대적으로 맞습니다. 그것은 마술이 아닙니다. if (b> c) if (d == e) {/ * do stuff * /}'처럼 중괄호없이'if'를 중첩하는 것과 똑같습니다. 괄호를 추가하여'if (a> b) {if (b> c) {if (d == e) {/ * 할 일 * /}}}'을 생성하는 경우도 마찬가지입니다. – Lumen

1

. 그것은 객체의 수명을 최소한으로 유지하는데, 나쁜 일은 아닙니다.