2014-11-23 2 views
-1

구문 오류입니까 아니면 컴파일 오류입니까?C# 구문 오류

using System; 

namespace AAA 
{ 
    class MyException : Exception{ 

    } 
    class My2Exception : MyException{ 

    } 
    class MainClass 
    { 
     public static void Main (string[] args) 
     { 
      try{ 
       throw new MyException(); 
      } 
      catch(Exception e){ // compiler says that this catch all exception occur   error? Is it syntax error? 
      } 
      catch(MyException m){ // Syntax error 
      } 
     } 
    } 
} 

구문 오류입니까? 이 오류 구문 오류입니까? 감사합니다.

+0

R #에 걸렸습니다. 예를 들어,'return'이나'break' 문 다음에 추가적인 브랜칭 논리를 두는 것 ('Unreachable code detected'라는 경고를 주지만 오류는 아닙니다). 그게 여기서 일어날 수 있을까요? – theMayer

답변

7

의해 바와 같이 는 구체적 catch 블록을 제공 할 필요뿐만 아니라 여분이지만, C에서 # compile time error입니다. 따라서, 다중 catch 블록에, 당신은 항상 마지막에 가장 일반적인 catch 블록을 지정해야합니다 :

using System; 

namespace AAA 
{ 
    class MyException : Exception 
    {  

    } 

    class MainClass 
    { 
     public static void Main (string[] args) 
     { 
      try 
      { 
       throw new MyException(); 
      } 
      catch (MyException m) 
      { 
       //TODO: something 
      } 
      catch (Exception e) 
      { 
       //TODO: something 
      } 
     } 
    } 
} 
실제로 이러한 종류의 실수를하지 않았하지만 C#에서 비슷한 실수가 컴파일러에 의해 대신 잡히지 않는
4

ExceptionMyException보다 일반적인 클래스이므로 마지막으로 잡아야합니다. 타입 Exception 가능한 적어도 특정 예외 핸들러는 해당하는 catch 블록 때문에 Shaharyar 그것을 '의미 오차

try{ 
    throw new MyException(); 
} 
catch(MyException m){ 
} 
catch(Exception e){ // Syntax error 
} 
+1

나는 그것을 알고있다 : D 그러나 그것은 "구문 오류"인가? 또는 어떤 에러가 있습니까? –

+2

@Gui_C 글쎄, 모든 것이 유효한 C# 구문을 사용하여 작성되었으므로 구문 오류가 아닙니다. 그냥 컴파일 시간 오류 –

+0

그 의미 론적 오류 – Shaharyar