You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为C#中public enum的特定值设置internal访问修饰符?

在C#中无法为单个枚举成员设置不同的访问修饰符

很遗憾,你想要的这种写法在C#里是完全行不通的,而且会直接触发编译错误。

原因很简单:

C#的枚举类型规则里明确规定:枚举成员不能拥有独立的访问修饰符,所有枚举成员的可见性完全继承自枚举类型本身。也就是说,如果你的枚举是public,那所有成员都会是public;如果枚举是internal,所有成员也都是internal——你没办法单独给某一个成员设置不同的访问级别。

你贴的这段代码:

public enum Numbers { One, Two, Three, internal Zero // I want zero as internal }

编译器会直接报错,因为internal修饰符不能用在枚举成员上。

替代方案

如果你确实需要让Zero只在程序集内部可见,同时其他成员对外公开,可以试试这两种思路:

1. 拆分枚举类型

把内部使用的成员和公开成员拆成两个枚举:

// 对外公开的枚举,只包含需要暴露的成员
public enum Numbers { One, Two, Three }

// 程序集内部使用的完整枚举,包含Zero
internal enum InternalNumbers { One, Two, Three, Zero }

内部代码里可以通过类型转换在两个枚举间切换,比如(InternalNumbers)Numbers.One,这样既保证了对外的封装性,内部又能使用完整的枚举值。

2. 用内部常量封装Zero

如果不想拆分枚举,可以把整个Numbers设为public,然后用一个内部类来封装Zero的使用:

public enum Numbers { One, Two, Three }

// 仅程序集内部可见的类,封装Zero的常量
internal static class InternalNumberHelpers
{
    // 用强类型的枚举值封装,确保类型安全
    public static readonly Numbers Zero = (Numbers)3;
}

内部代码里直接用InternalNumberHelpers.Zero来指代这个值,外部代码看不到这个内部类,自然也就无法访问Zero。

内容的提问来源于stack exchange,提问作者VenkyDhana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:48:49