【发布时间】:2023-04-01 14:40:01
【问题描述】:
我想在一个类中定义一个枚举。该类将具有枚举类型的公共属性。我希望这个类之外的类能够引用这个类的枚举属性,但我不希望其他类能够创建自己的这个枚举实例。这甚至可能吗?考虑这个例子:
public class MyClassWithEnum
{
public Season MySeason { get; set; }
public enum Season { Winter, Spring, Summer, Fall }
}
public class OutsideClass
{
public void OutsideClassMethod()
{
MyClassWithEnum enumClass = new MyClassWithEnum();
enumClass.MySeason = MyClassWithEnum.Season.Spring; // This should be okay
MyClassWithEnum.Season localSeason = MyClassWithEnum.Season.Winter; // This should NOT be okay
}
}
在我看来,我只能在将枚举定义为公共并让任何其他类创建它的实例,或者将其设为私有并且无法从类外部设置它之间做出选择。
【问题讨论】:
-
这似乎是不可能的。如果您将其设为
private,则您不能拥有该类型的public属性。如果您将其设为public,那么任何人都可以创建该类型的变量。因为它是一个值类型,所以你不能阻止使用私有默认构造函数进行构造,就像使用引用类型一样。 -
也许你想要的是一个带有私有构造函数和几个公共静态单例实例的类,即所谓的type-safe enum pattern。
标签: c# enums access-modifiers