在C#中,我们可以将任何成员定义为Internal,这使得它只在当前程序集中可见:
internal int Age;
我想知道是否有可能扭转此效果,将其标记为私有/受保护此程序集,但公开指定其他程序集。
这听起来很疯狂,但我们有充分理由这样做。我们正在使用Unity3D游戏引擎,我们所有的游戏逻辑都在“运行时”中。部件。我们还可以为这些类定义自定义编辑器,这允许我们在IDE中创建自定义UI控件。这些编辑住在一个特殊的编辑器中。组装
这个编辑器程序集经常需要有关运行时程序集中特定类型的更多信息,然后我们要公开自己的程序集。我们目前的解决方案是通过Reflection获取特定的私人/受保护成员,但我想知道是否有更好的解决方案。
答案 0 :(得分:3)
您无法更改这些成员的可见性。
一种选择是创建一个公开所需成员的接口,然后显式实现它:
class MyClass : IEditable
{
internal int Age { get; private set; }
int IEditable.Age { get; set; }
}
在这种情况下,您必须将MyClass
转换为IEditable
才能访问属性。它还有助于确定何时更改运行时程序集会破坏编辑器。
答案 1 :(得分:0)
听起来像设计问题。两个程序集必须知道的数据应该与其自己的程序集隔离,并由每个程序集引用。如果做不到这一点,您可以查看创建一个包装器/适配器,以一种只读方式公开公开核心组件中的隐藏数据。