3

C #을 처음 접했을 때까지 파스칼 애호가였습니다. 델파이에서는 C #으로 구현 된 try {} 문도 있습니다.

그러나, "Using () {}은 try {}"보다 낫다는 언급이있었습니다.

다음은 그 예입니다.

   //This might throw an exception
   sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
   sock.Connect(ip, port);

   //Try statement
   try
   {
       sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
       sock.Connect(ip, port);
   catch
   {
   }

   //using(){}
   using(sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
   {
          sock.Connect(ip, port);
   }

내 질문 :

  1. 예외가 발생하면 어떻게됩니까? "using"문장 안에 있습니까?

  2. 언제 "시도하다"를 "사용"해야합니까? "사용"을 "시도"할 때?

  3. "사용하는"목적은 무엇입니까? 성명서?

미리 감사드립니다!


7 답변


10

사용하고 시도하는 것은 매우 다른 두 가지이며 완전히 직교합니다.

예외가 발생하고 try 블록에없는 경우 적절한 예외 처리기가 발견 될 때까지 스택이 unwind됩니다. 이것은 using 문과는 관계가 없습니다.

용도using {}사용 후 개체가 올바르게 정리되도록하려면 사용 블록 다음에 예제 양말이 올바르게 처리됩니다.

사용에 대한 자세한 정보는using웹에서 검색 (또는 SO)IDisposable".


7

using 문은 IDisposable을 구현하는 새 객체를 만들고 사용할 때 사용됩니다. use 문은 예외가 use 블록 내에서 발생하더라도 항상 객체를 처리합니다.

try / catch 문은 일반적으로 완전히 다른 목적을 제공하지만 try / catch / finally 또는 try / finally 정렬의 finally 블록은 무조건 실행되는 것과 동일한 목적을 수행합니다. 사용 통계는 처분 할 자동 호출을 구입합니다.

David Hayden의 기사를 추천합니다.C #코드 검토 - C #문 사용 - 마지막으로 - IDisposable - Dispose () - SqlConnection - SqlCommand

using 문에 대한 MSDN 기사

Try / Catch / Finally에 관한 MSDN 기사


4

usingtry / catch와 완전히 다릅니다. 에이using블록은IDisposable이 배치되어있다.Dispose()호출됩니다. 시도하고 잡아서 예외를 처리합니다. 에이using블록은 다음과 유사합니다.

IDisposable d; try { d = m; } finally { d.Dispose(); }

이것과using변수의 범위입니다.using블록 내부에 생성됩니다.

m어떤 개체 구성을위한 자리 표시 자입니다. 자세한 내용은 MSDN 아래를 참조하십시오.using,IDisposable. 특히 처리, 가비지 수집 및 관리되지 않는 리소스에 대한 정보는 읽을 가치가 있습니다.


3

using 문은 IDisposable이 사용 된 후에 처리되도록합니다.

당신이 설명 할 수없는 예외를 잡기 위해 예외가 사용됩니다.

그래서 그들은 실제로 교환 할 수 없습니다.


2

"시도"에 관한 것이 아니라 try /마침내및 / 또는 시도 /잡기. 그리고 그들은 완전히 다른 목적을 가지고 있습니다.

using은 약간 짧고 친숙한 표기법입니다.try{}finally{ Dispose() }따라서 바람직하다.


1

using은 try {} finally {}이며 마지막으로 IDispose를 구현하는 무언가의 dispose () 메서드를 호출합니다. 따라서 객체가 IDispose ... {}을 (를) 사용하여 지원하는 경우 좋은 경험 법칙으로


0

try 블록은 예기치 않은 일이 일어날 수있는 코드 블록 (데이터베이스 오류, 연결 실패 등)을 의미하며 그 외의 용도로 사용해야합니다. 예외를 잡을 준비가되면 리소스가 많이 필요하므로 try-catch 블록을 제한 할 수 있다면 더 좋습니다. 즉, 방어 프로그래밍을위한 매우 강력한 도구이며 예외 로그에서 문제에 대한 많은 정보와 통계를 수집 할 수 있으므로 성능 손실은 확실히 가치가 있습니다.

Using-blocks은 변수를 엄격하게 범위 지정하는 데 사용되며 매우 짧은 기간 이상 필요하지 않은 메모리가 많은 객체에 유용합니다. 그것들은 기본적으로 런타임에 "이 블록 이후에 객체를 없애라"는 메시지입니다.


  • 사용 블록에 대한 완전히 부정확 한 설명은 -1입니다. - Joe

연결된 질문


관련된 질문

최근 질문