C#跨类访问公共Dictionary时报CS0050可访问性不一致错误如何解决
错误原因
CS0050报错的核心是可访问性不一致:你将LoadAudioForm类中的noteValue字段设为public公开级别,但该字典的Value类型CachedSound的访问修饰符低于public(比如是默认的internal,或者定义在某个类内部的private/protected),导致外部访问noteValue时,无法识别返回的CachedSound类型,编译器直接阻断了这种不合规的定义。
修复方案
方案1(最通用):将
CachedSound类的访问修饰符改为public
找到CachedSound的定义代码,将类声明修改为:public class CachedSound { // 原有类逻辑不变 }若
CachedSound是嵌套类,需要保证它的所有外层类的访问修饰符也为public。方案2(不希望对外暴露
CachedSound时使用):降低noteValue的访问级别和CachedSound对齐
比如CachedSound是internal级别的话,将noteValue的修饰符也改为internal:internal Dictionary<int, CachedSound> noteValue = new Dictionary<int, CachedSound>();
额外注意
你当前第二个类的调用写法默认把noteValue当成了静态字段,但你现有代码里noteValue是实例成员,直接用类名LoadAudioForm.noteValue访问会触发额外报错,需要二选一修改:
- 若需要全局共享同一个字典,将
noteValue改为静态字段:// 修饰符加static public static Dictionary<int, CachedSound> noteValue = new Dictionary<int, CachedSound>(); - 若每个
LoadAudioForm实例对应独立的字典,需要先获取到LoadAudioForm的实例对象,再通过实例访问:// 示例:假设已经拿到了LoadAudioForm的实例对象formInstance AudioPlaybackEngine.Instance.PlaySound(formInstance.noteValue[ne.NoteNumber + (Convert.ToInt32(nVelR) * 100)]);
内容的提问来源于stack exchange,提问作者Alexander Bunt
相关产品推荐
相关产品推荐

