类与枚举不同访问级别处理:public类引用internal枚举报错解决
解决C#访问级别不一致错误:Inconsistent accessibility
错误原因
这个错误的核心逻辑很明确:public类的public成员,其类型的访问级别不能低于该成员的访问级别。你的Style类是public(允许任何外部程序集访问),但StyleType枚举是internal(仅能在当前程序集内访问)。当外部代码尝试访问Style.Type这个public属性时,根本无法识别它的类型StyleType,直接导致访问级别冲突。
符合需求的解决方案
因为你明确要求Style保持public、StyleType保持internal,可以通过以下两种方式解决:
方案一:调整属性访问级别与类型匹配
将Style.Type的访问修饰符改为internal,让属性的访问级别和其类型一致,外部代码无法看到该属性,自然消除冲突:
public class Style : VisionItem, BaseItem { public string TargetType { get; set; } public string FontFamily { get; set; } public int FontSize { get; set; } internal StyleType Type { get; set; } // 修改为internal } internal enum StyleType { TextCss, TextJs }
方案二:封装内部枚举,对外暴露兼容类型
如果外部代码需要获取Type的相关信息,但又不能暴露StyleType,可以将属性对外封装为int或自定义public标识,内部转换为StyleType处理:
public class Style : VisionItem, BaseItem { // 对外暴露的常量,供外部代码识别类型 public const int TypeTextCss = 0; public const int TypeTextJs = 1; public string TargetType { get; set; } public string FontFamily { get; set; } public int FontSize { get; set; } // 对外公开的属性,用int传递类型信息 public int Type { get => (int)InternalType; set => InternalType = (StyleType)value; } // 内部使用的枚举属性,访问级别为internal internal StyleType InternalType { get; set; } } internal enum StyleType { TextCss = TypeTextCss, TextJs = TypeTextJs }
补充说明
如果没有严格限制StyleType必须为internal,最简单的解决方式是直接将StyleType改为public,让类型和属性的访问级别统一,错误会直接消失。但该方案不符合你当前的需求。
内容的提问来源于stack exchange,提问作者py_mc
相关产品推荐
相关产品推荐

