2010-07-05 74 views
4

我有一个自定义类“错误”和一些预先创建的错误(让我们称他们为A,B和C)。现在我很想组这些预先创建者在一个组(例如,“StockErrors”),并像一个枚举使用它们种:像枚举,但对象

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

任何想法如何,我可以做到这一点?这可能是一个非常简单的...

在此先感谢!

+0

哇,你们真是太棒了!完美工作:) – 2010-07-05 23:02:57

回答

4

制作staticStockErrorspublic static readonly类型Error已初始化为适当的值。 (您也可以使用属性)

根据您的Error类,你可能还需要重写==!=EqualsGetHashCode使用值语义。

+0

替代重写相等比较,可以使所有构造函数都是私有的,并仅通过静态属性将单个实例公开为单例,然后依赖对象标识。 – 2010-07-05 22:50:39

+0

@丹尼尔:他说了很多值。 – SLaks 2010-07-05 22:51:24

+0

单例不是绝对正确的术语 - 我的意思是每个特定错误一个实例。 – 2010-07-05 22:53:47

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(...); 
    } 
}