【问题标题】:Is it possible to limit instances of public inner enum or class to its parent class in C#?是否可以在 C# 中将公共内部枚举或类的实例限制为其父类?
【发布时间】: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


【解决方案1】:

您不会像在类中那样实例化枚举,因此您不能阻止某人使用它。例如,对于一个类,您可以拥有一个私有 ctor……这显然不可能使用 Enums。

所以是的,您的假设是正确的,要么将其设为内部或私有,要么将其设为公开...... ;)

顺便说一句,我想不出任何好的场景,你想在使用 Enum 的公共属性的同时隐藏 Enum,即使在可能的情况下这样做也是如此。

【讨论】:

    猜你喜欢
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    相关资源
    最近更新 更多