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);
}
내 질문 :
예외가 발생하면 어떻게됩니까? "using"문장 안에 있습니까?
언제 "시도하다"를 "사용"해야합니까? "사용"을 "시도"할 때?
"사용하는"목적은 무엇입니까? 성명서?
미리 감사드립니다!
사용하고 시도하는 것은 매우 다른 두 가지이며 완전히 직교합니다.
예외가 발생하고 try 블록에없는 경우 적절한 예외 처리기가 발견 될 때까지 스택이 unwind됩니다. 이것은 using 문과는 관계가 없습니다.
용도using {}
사용 후 개체가 올바르게 정리되도록하려면 사용 블록 다음에 예제 양말이 올바르게 처리됩니다.
사용에 대한 자세한 정보는using
웹에서 검색 (또는 SO)IDisposable
".
using 문은 IDisposable을 구현하는 새 객체를 만들고 사용할 때 사용됩니다. use 문은 예외가 use 블록 내에서 발생하더라도 항상 객체를 처리합니다.
try / catch 문은 일반적으로 완전히 다른 목적을 제공하지만 try / catch / finally 또는 try / finally 정렬의 finally 블록은 무조건 실행되는 것과 동일한 목적을 수행합니다. 사용 통계는 처분 할 자동 호출을 구입합니다.
David Hayden의 기사를 추천합니다.C #코드 검토 - C #문 사용 - 마지막으로 - IDisposable - Dispose () - SqlConnection - SqlCommand
using
try / catch와 완전히 다릅니다. 에이using
블록은IDisposable
이 배치되어있다.Dispose()
호출됩니다. 시도하고 잡아서 예외를 처리합니다. 에이using
블록은 다음과 유사합니다.
IDisposable d; try { d = m; } finally { d.Dispose(); }
이것과using
변수의 범위입니다.using
블록 내부에 생성됩니다.
m
어떤 개체 구성을위한 자리 표시 자입니다. 자세한 내용은 MSDN 아래를 참조하십시오.using
,IDisposable
. 특히 처리, 가비지 수집 및 관리되지 않는 리소스에 대한 정보는 읽을 가치가 있습니다.
using 문은 IDisposable이 사용 된 후에 처리되도록합니다.
당신이 설명 할 수없는 예외를 잡기 위해 예외가 사용됩니다.
그래서 그들은 실제로 교환 할 수 없습니다.
"시도"에 관한 것이 아니라 try /마침내및 / 또는 시도 /잡기. 그리고 그들은 완전히 다른 목적을 가지고 있습니다.
using은 약간 짧고 친숙한 표기법입니다.try{}finally{ Dispose() }
따라서 바람직하다.
using은 try {} finally {}이며 마지막으로 IDispose를 구현하는 무언가의 dispose () 메서드를 호출합니다. 따라서 객체가 IDispose ... {}을 (를) 사용하여 지원하는 경우 좋은 경험 법칙으로
try 블록은 예기치 않은 일이 일어날 수있는 코드 블록 (데이터베이스 오류, 연결 실패 등)을 의미하며 그 외의 용도로 사용해야합니다. 예외를 잡을 준비가되면 리소스가 많이 필요하므로 try-catch 블록을 제한 할 수 있다면 더 좋습니다. 즉, 방어 프로그래밍을위한 매우 강력한 도구이며 예외 로그에서 문제에 대한 많은 정보와 통계를 수집 할 수 있으므로 성능 손실은 확실히 가치가 있습니다.
Using-blocks은 변수를 엄격하게 범위 지정하는 데 사용되며 매우 짧은 기간 이상 필요하지 않은 메모리가 많은 객체에 유용합니다. 그것들은 기본적으로 런타임에 "이 블록 이후에 객체를 없애라"는 메시지입니다.