C++에서는 맨손으로 예외를 throw 할 수 있지만 C#에서는 Exception
을 던져야합니다. C++에서 문자열을 던지는 것과 동일한 C#은 무엇입니까?C++/C# 예외 throwing
예를 들어, C++에서는 throw "something bad happened"
을 사용할 수 있습니다. C#에서는 이것이 .....일까요?
C++에서는 맨손으로 예외를 throw 할 수 있지만 C#에서는 Exception
을 던져야합니다. C++에서 문자열을 던지는 것과 동일한 C#은 무엇입니까?C++/C# 예외 throwing
예를 들어, C++에서는 throw "something bad happened"
을 사용할 수 있습니다. C#에서는 이것이 .....일까요?
질문은 아주 희미하지만 문제는 "C++에서는 문자열을 던질 수 있지만 C#는 무엇입니까?"
C#에서는 C++에서 수행하는 것과 비슷한 방식으로 예외를 발생시킵니다. 주요 차이점은 C#에서는 System.Exception
에서 파생 된 클래스 만 throw 할 수 있지만 C++에서는 std::exception
또는 다른 예외 기반 클래스에서 파생 된 클래스 만 throw하는 것이 좋지만 모든 유형을 throw 할 수 있지만 일반 문자열은 표시하지 않습니다. C++에서).
C#으로 단지 System.Exception
이 아니라는 것을 명심하십시오, 그러나 예외가 발생하는 가장 일반적인 이유를 설명하는 다양한 파생 클래스의 봐서 거기 (ArgumentOutOfRangeException
는 InvalidOperationException
는 OverflowException
는 ... 그냥 무작위로 대답) 그리고이 방법을 사용하면 문제의 유형을 표현할 수있는 더 나은 방법을 얻을 수 있습니다 (유형은 catch
블록으로 구분할 수 있음). 그리고 사용자 정의 오류 문자열을 건설자. 이것은 단지 문자열을 던지는 것보다 훨씬 낫습니다. 왜냐하면 예외가 "012"를 최대치로 "버블 링"하여 더 많거나 적게 만 문제를 기록하고 종료 할 수 있다면 일반 System.Exception
을 잡아서 여전히 로그를 표시하므로 잡을 수 있기 때문입니다 에러 문자열
이 방법은 C++에서도 가능하지만 미리 만들어진 파생 예외 (<stdexcept>
)는 .NET Framework에서 제공하는 것보다 훨씬 적습니다.
또 다른 중요한 차이점은 (C++에서 제공됨) C++에서는 throw에서 오는 스택 해제가 모든 로컬 객체를 즉각적으로 (RAII이 빌드 된 개념) 파괴하고 C#에서는 파괴가 비 결정적임을 나타냅니다 그 (것)들을 가르키는 vars가 범위에서 나간 후에 어떤 순간에); 따라서 이러한 경우에는 즉시 풀어서 IDisposable
인터페이스를 구현하고 using
블록을 사용해야하는 클래스를 갖는 것이 중요합니다.
C#에서는 Exception 클래스에서 파생 된 개체 만 throw 할 수 있습니다. CLR 자체는 다른 유형도 허용하므로 실제로 원하는 경우 다른 언어 또는 IL에서 직접 문자열을 throw하는 메소드를 작성할 수 있어야합니다. C#에서는 문자열 예외로 catch 할 수 없습니다 (예외 유형이없는 "catch"가있는 알 수없는 예외로만).
목표에 따라 throw new Exception("My string here");
이면 충분할 수 있습니다. EDIT (Neil에게 감사드립니다.) 그러나 실험을 한 번 치우지 않는 한 자신 만의 예외를 만들어야합니다.
-1 아니요 아니요 아니요. http://msdn.microsoft.com/en-us/library/ms173163.aspx System.Exception을 throw하지 마십시오. 호출 코드가 실패를 알 수 있도록 예외를 throw하고 일반 예외를 throw하면 코드에서 발생할 수있는 여러 가지 문제를 처리 할 수 없습니다. – Neil
답변을 시도 할 수는 있지만 문자열을 던지는 것일뿐입니다. –
귀하의 질문에 아무런 의미가 없습니다. – Divi
C++에서 "throw"를 할 수 있습니까? 이것은 오류 ";"이며 C#과 동등한 것이 좋습니다. –