2010-08-06 2 views
3

가능한 중복 :
Why use finally in C#? C#에서C# : 왜 '마침내'조항이 있습니까?

하는 finally 절을 갖는 점은 무엇인가?

예 :

try { 
     // do something 
    } 
catch (Exception exc) 
    { 
     // do something 
    } 
// do something 

결국 코드가 실행되지 않습니까? finally 블록의 요점은 무엇입니까?

+0

@ Otávio try 또는 catch 블록의 코드가 수익을 내면 어떻게 될까요? –

+0

... 또는 rethrow –

답변

0

이전 코드의 성공 여부와 상관없이 실행하려는 코드가 있습니다. Try/Catch/Finally를 사용하면 오류 처리의 이점을 누릴 수 있습니다.

7

마지막으로 catch가 예외를 throw하고 성공 및 실패시 코드를 exewcute 할 수있는 이벤트의 경우 최종적으로 이 실행됩니다.이 실행됩니다. 항상.

시스템 수준에서 응용 프로그램이 종료되거나 컴퓨터가 폭발하는 경우를 제외하고는 확인하십시오.

+2

-1 : 항상 강한 단어입니다. StackOverflowException? –

+0

@ 모론 : true, fixed. –

+2

@Moron : 항상 정말로 강한 단어 일지 모르지만 그것은 단락의 추가 단락이 필요하지 않은 유일한 것입니다. – AllenG

0

정리를 수행해야하는 특정 개체가 있기 때문에 그렇지 않으면 응용 프로그램에 문제가 발생할 수 있습니다.

끊임없이 사용 예를

는도록 SqlConnection 사용 :이 경우

SqlConnection conn = new SqlConnection(connString); 

try 
{   
    conn.Open(); 

    throw new ArgumentException(); 
} 
catch(SqlException ex) 
{ 
} 

을 SqlConnection이 당신이 SQLEXCEPTION을 처리하기 때문에 닫을 수있는 방법으로 열려 있지만, 경우 ArgumentException이 발생합니다. 당신이 마지막으로 블록을 사용한 경우 finally 블록 코드가 실행 때문에,이 일어나지 않을 것입니다 :

try 
{   
    conn.Open(); 

    throw new ArgumentException(); 
} 
catch(SqlException ex) 
{ 
} 
finally 
{ 
    conn.Dispose(); 
} 
1

을 마지막으로 아무것도 보장 이전 두 명령문이 활성화되었는지 여부에 관계없이 블록이 실행됩니다.

좋은 예는 데이터베이스 리소스를 해제하는 것입니다.

Try-Catch-Finally

예 :

try 
{ 
    //Open a database connection 
} 
catch 
{ 
    //Catch exception, database connection failed 
} 
finally 
{ 
    //Release the opened database connection resources 
} 
0

(가) 마지막으로는 시도의 작품 경우에 발생하거나 실패 할 것이다에 어떤임을 보장합니다. 캐치가 발생하는 시나리오에서는 사용자가 마지막으로 //do something의 모든 것이 발생한다고 보장 할 수 없습니다.

0

finally 블록의 코드는 예외가 throw되었는지 여부에 관계없이 항상 실행됩니다. catch에서 경로가 반환되면 예외 블록 다음의 코드가 실행되거나 실행되지 않을 수 있습니다.

관련 문제