2012-03-05 2 views
1

throw 키워드를 가져 오지 못해서 왜 사용합니까? 어떤 이점이 있습니까?C# 왜 오류가 발생합니까

try 
{ 
    Classreference.MethodToRun(); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.ToString(), "Message", MessageBoxButtons.OK, MessageBoxIcon.Error); 
} 

이 작동하지만 난 내가 대신 오류가 발생하고 내 UI 클래스에서 그것을 잡을 호출하고있는 방법을 만들 수 throw과 같다 :

는 지금부터 내 UI 클래스에이있어 ? 하지만 왜? 그것에 대해 더 좋은 점은 무엇입니까? 더 많은 객체 지향적 인 클래스를 만드는 것이 완료 되었습니까? 나는 단지 호출하는 메서드를 변경하는 경우 코드를 변경하지 않아도되지만 변경되는 메서드에서 오류 메시지를 대신 변경하는 UI 클래스에서 오류를 잡을 것 같아요?

+2

Google "C# 예외 처리 모범 사례"를 읽고 가능한 모든 기사를 읽으십시오. – asawyer

+0

가! 가까운 페스트 광기 사람들을 막으십시오! 이것은 실제 질문입니다 ... 코드가 포함되어 있습니다. 여기에 유용한 유용한 답변이 있습니다. – Josh

+0

@Josh - 편집 내역을 확인하십시오. 그 질문은 처음에는 이해할 수 없었습니다. – Oded

답변

1

오류가 발생했음을 나타내는 throw를 사용하여 기존 오류를 상위 수준으로 전달합니다.

오류 (예외)를 처리하려면 catch를 사용하십시오.

오류를 던집니다. 오류 코드를 반환 할 오류를 처리하는 이전 절차 적 방법보다 개선 된 기능입니다.

간단한 성공 사례에 대한 논리를 작성할 수 있기 때문에 더 나은 이유가 있으며, 일이 잘못되면 하위 수준 코드에서 오류 처리가 발생하지 않습니다. 그런 다음 특정 예외가 발생할 때 수행 할 작업을 결정하는 것은 응용 프로그램의 상위 수준에 달려 있습니다.

+0

이것은 정확하게 내가 주제를 짧게, 그리고 핵심 부분을 찾고있는 것이 었습니다. 감사. – Gvs

0

throw 키워드를 사용하면 상위 메서드에 대한 예외를 throw 할 수 있습니다.

이 방법을 사용하면 데이터베이스 액세스를 닫는 것과 같은 것을 예외적으로 더 잘 사용할 수 있습니다.

0

여기에서하는 일은 예외에서 얻을 수있는 많은 정보를 효과적으로 마스킹하는 것입니다. 정기적으로 수행하고자하는 작업은 예외를 catch하고 관련 정보를 검토 할 수있는 곳 (logfile, db, eventlog)과 스택 추적을 그대로 유지하는 throw() 또는 다른 " 사용자 친화적 인 "예외로 기술 구현을 마스킹합니다.

0

asawyer가 맞다면, 당신은 google과 오류 처리에 관해 읽을 필요가 있습니다. 그것은 폭 넓은 주제이며, 연습, 말하기, 그리고 읽기에 대해서만 실제로 얻을 수 있습니다. throw은 지나치게 자주 사용하지 않아도되지만 가끔씩 원치 않는 동작을 중지하고 메서드를 사용하는 프로그래머에게 더 명확한 오류를 생성 할 수 있습니다. 나는 그것이 매우 인위적인 알고 있지만,이 예제를 가지고 :

public string WriteToFile(FileStream fs) { 
    if (fs == null) { 
    throw new ApplicationException("you passed a null filestream"); 
    } 

    // write to file 
} 

당신은 단지 그것을 검증하지 않고 파일에 FileStream를 작성하는 시도 할 수 있지만, 그렇게 당신은 당신의 방법을 소비하는 사람을 위해 더 이해할 수있는 오류를 생성합니다.

관련 문제