2010-07-05 4 views
4

커스텀 클래스 "Error"와 일부 사전 생성 된 오류 (A, B, C라고 부름)가 있습니다. 지금은 한 그룹에서 그룹 (예를 들어, "StockErrors을")이 미리 만들어진 것들 싶어요 및 열거처럼 가지를 사용enum과 비슷하지만 객체의 경우

private void SomeFunction(Error NewError) 
{ 
    if (NewError == StockErrors.A) DoSomething(); // this is what I need. 
} 

모든 아이디어는 내가이 작업을 수행 할 수있는 방법? 아마도 매우 간단 할 것입니다 ...

미리 감사드립니다!

+0

와우, 여러분 모두 놀랍습니다! 완벽하게 작동했습니다 :) –

답변

4

StockErrors이라는 필드의 값이 public static readonlystatic 클래스를 적절한 값으로 초기화하십시오. 당신의 Error 클래스에 따라

(또한 속성을 사용할 수 있습니다), 당신은 또한 ==, !=, EqualsGetHashCode 값의 의미를 사용 오버라이드 (override) 할 수도 있습니다. 이 같은

+0

평등 비교를 재정의하는 대신 모든 생성자를 비공개로 만들 수 있으며 정적 속성을 통해 인스턴스를 단일 개체로 노출 한 다음 개체 ID를 사용합니다. –

+0

@ 대니얼 : 그는 _some_ 값을 말했다. – SLaks

+0

싱글 톤은 절대적으로 올바른 용어는 아닙니다. 특정 오류마다 하나의 인스턴스를 의미합니다. –

1

뭔가 :

public static class StockErrors 
{ 
    public static readonly Error A = new Error("A"); 
    public static readonly Error B = new Error("B"); 
    public static readonly Error C = new Error("B"); 
} 

그것은 일반적으로 나쁜 형태로 간주되는 필드를 노출하지만, 죽은 간단한 선언입니다. 조금 더 받아 들일 수 있도록 필드를 private으로 선언 한 다음 public static 속성으로 표시 할 수 있습니다.

또한 Error 클래스를 상수 값만을 ​​기반으로 구성 할 수없는 경우 정적 생성자에서 변수를 초기화해야합니다. 값이 속성에 의해 노출되고 정적 생성자에서 초기화되는 예제는 다음과 같습니다.

public static class StockErrors 
{ 
    private static readonly Error a; 
    private static readonly Error b; 
    private static readonly Error c; 

    public static Error A { get { return a; } } 
    public static Error B { get { return b; } } 
    public static Error C { get { return c; } } 

    static StockErrors() 
    { 
     a = new Error(...); 
     b = new Error(...); 
     c = new Error(...); 
    } 
} 
관련 문제