我有这样的代码如何安全地使用枚举重载构造函数? C#
public enum MyEnumOne : byte { ... }
public enum MyEnumTwo : byte { ... }
public class MyClass
{
public readonly MyEnumOne E1;
public readonly MyEnumTwo E2;
private MyClass(MyEnumOne e1)
{
E1 = e1;
}
private MyClass(MyEnumTwo e2)
{
E2 = e2;
}
public static MyClass CreateWithE1(MyEnumOne e1)
{
return new MyClass(e1);
}
public static MyClass CreateWithE2(MyEnumTwo e2)
{
return new MyClass(e2);
}
}
我怎么能相信,该代码会一直投正确的构造函数重载?
var A = MyClass.CreateWithE1(0);
var B = MyClass.CreateWithE2(0);
我可以通过让类变为可变来确保这一点,但我不需要该类是可变的。
注:如果我犯任何错误使类不可变的,请告诉我:)
编辑:两个枚举有他们的第一个元素None = 0
并且有合法的情况下,用一个枚举的实例None
可能是创建。
我认为这是足够安全的。由于您正在使用'MyEnumOne'和'MyEnumTwo'作为参数类型。您是否收到任何模糊呼叫的警告? – Habib 2014-09-24 14:40:36
或者你是否担心使用只存在于E2中的*值*来调用'CreateWithE1'? – Rawling 2014-09-24 14:42:03
它怎么可能*不*使用正确的构造函数超载?如果你传入一个类型为“MyEnumOne”的对象,它怎么可能调用MyEnumTwo重载?如果您尝试显式调用该重载(通过移除其他重载),它甚至不会编译。 – Servy 2014-09-24 14:42:44