C #에서 내 자신의 예외를 어떻게 정의합니까?
C #에서 내 자신의 예외를 어떻게 정의합니까?
고유 한 예외를 만들기위한 지침 (클래스가 예외에서 상속해야한다는 사실 옆)
[Serializable]
속성 을 추가하여 클래스가 직렬화 가능한지 확인하십시오.예외에서 사용되는 공통 생성자를 제공하십시오.
MyException (); MyException (string message); MyException (string message, Exception innerException);
따라서 이상적으로는 사용자 정의 Exception
가 다음과 같이 표시되어야합니다.
[Serializable]
public class MyException : Exception
{
public MyException ()
{}
public MyException (string message)
: base(message)
{}
public MyException (string message, Exception innerException)
: base (message, innerException)
{}
}
당신이 상속할지 여부를 사실 정보 Exception
나 ApplicationException
:합니다 FxCop은 상속되지 않도록해야한다고 말했습니다 규칙이 있습니다 ApplicationException
:
CA1058 : Microsoft.Design :
더 이상 'ApplicationException'을 확장하지 않도록 'MyException'의 기본 유형을 변경하십시오. 이 기본 예외 유형은 프레임 워크 클래스에 대한 추가 값을 제공하지 않습니다. 대신 'System.Exception'또는 기존 봉인되지 않은 예외 유형을 확장하십시오. 전체 예외 클래스에 대한 catch 핸들러 생성을 활성화하는 데 특정 값이 없으면 새 예외 기본 유형을 생성하지 마십시오.
이 규칙에 대해서는 MSDN 페이지를 참조하십시오 .
제가 약간의 예외적 인 은밀한 전투를 시작한 것 같습니다. 따르는 Microsoft 모범 사례 가이드에 따라 System.Exception 또는 System.ApplicationException에서 상속 할 수 있습니다. 혼란을 해소하려는 좋은 (그러나 오래된) 블로그 게시물이 있습니다. 지금은 Exception을 사용하여 예제를 유지하지만 게시물을 읽고 필요한 사항에 따라 선택할 수 있습니다.
http://weblogs.asp.net/erobillard/archive/2004/05/10/129134.aspx
더 이상 전투가 없습니다! 예외가 System.ApplicationException이 아닌 System.Exception에서 상속되어야 함을 나타내는 FxCop 규칙 CA1058을 지적한 Frederik에게 감사드립니다.
CA1058 : 유형은 특정 기본 유형을 확장해서는 안됩니다.
Exception에서 상속하는 새 클래스를 정의합니다 (일부 생성자를 포함했지만 필요하지 않음).
using System;
using System.Runtime.Serialization;
[Serializable]
public class MyException : Exception
{
// Constructors
public MyException(string message)
: base(message)
{ }
// Ensure Exception is Serializable
protected MyException(SerializationInfo info, StreamingContext ctxt)
: base(info, ctxt)
{ }
}
그리고 던질 코드의 다른 곳 :
throw new MyException("My message here!");
편집하다
Serializable 예외를 보장하기 위해 변경 사항으로 업데이트되었습니다. 자세한 내용은 여기에서 찾을 수 있습니다.
Winterdom 블로그 아카이브-예외 클래스를 직렬화 가능하게 만들기
Exception 클래스에 사용자 지정 속성을 추가하는 경우 수행해야하는 단계에 대한 섹션을주의 깊게 살펴보십시오.
전화 해주신 Igor에게 감사드립니다!
정의하려면 :
public class SomeException : Exception
{
// Add your own constructors and properties here.
}
던지려면 :
throw new SomeException();
정의:
public class CustomException : Exception
{
public CustomException(string Message) : base (Message)
{
}
}
던지기 :
throw new CustomException("Custom exception message");
고유 한 예외를 정의 할 수 있습니다.
사용자 정의 예외 클래스는 ApplicationException 클래스 에서 파생됩니다 .
다음 코드를 볼 수 있습니다.
using System;
namespace UserDefinedException
{
class TestTemperature
{
static void Main(string[] args)
{
Temperature temp = new Temperature();
try
{
temp.showTemp();
}
catch(TempIsZeroException e)
{
Console.WriteLine("TempIsZeroException: {0}", e.Message);
}
Console.ReadKey();
}
}
}
public class TempIsZeroException: ApplicationException
{
public TempIsZeroException(string message): base(message)
{
}
}
public class Temperature
{
int temperature = 0;
public void showTemp()
{
if(temperature == 0)
{
throw (new TempIsZeroException("Zero Temperature found"));
}
else
{
Console.WriteLine("Temperature: {0}", temperature);
}
}
}
예외를 던지는 경우
System.Exception 클래스 에서 직접 또는 간접적으로 파생 된 경우 개체를 throw 할 수 있습니다.
Catch(Exception e)
{
...
Throw e
}
참조 URL : https://stackoverflow.com/questions/2200241/in-c-sharp-how-do-i-define-my-own-exceptions
'IT story' 카테고리의 다른 글
UIView의 clipsToBounds와 CALayer의 masksToBounds 사이의 관계는 어떻습니까? (0) | 2021.01.06 |
---|---|
MySQLnd가 활성 드라이버인지 확인하는 방법은 무엇입니까? (0) | 2021.01.06 |
jquery-ui 대화 상자 : 대화 상자의 단추를 기본 작업으로 설정 (Enter 키) (0) | 2021.01.06 |
개미 빌드 스크립트에서 최신 git 커밋 해시를 찾는 방법 (0) | 2021.01.06 |
.NET에서 대용량 (1GB) txt 파일을 읽는 방법은 무엇입니까? (0) | 2021.01.06 |