我想知道是否可以从c#中的其他项目访问内部类变量。我知道这在经常使用中是不可能的,我在下面解释。
我有一个包含这些类的项目(P1 [类库])......
internal class Settings
{
public static long size {get;set;}
public static DoSomethingInternalOnly()
{
}
}
public class Program
{
public static Main()
{
}
}
...和另一个(P2)包含:
public class Program
{
public static Main()
{
//P1.CopyOfSettings.size = 2048; ???
}
}
在Settings类中,我存储了app的内部变量(和方法),这些变量在其他项目中是看不到的。但是这些设置需要以某种方式从P2传递到P1所以我需要P2中的第二类“Settings2”包含相同的变量(仅变量!)作为带有public关键字的“Settings”。
我觉得创建包含相同变量的几个类是浪费时间并使代码不可读。有没有更好的方法来实现这个目标?
答案 0 :(得分:17)
您可以使用InternalsVisibleTo属性并提供可以在程序集中查看internal
类型的特定程序集的名称。
话虽如此......我认为你正在接受过度设计。如果Settings
类只属于程序集A ...不要将它放在程序集B中......将它放在程序集A中。
答案 1 :(得分:2)
是的,使用InternalsVisibleTo,但我只建议为单元测试项目执行此操作。
否则,您应该提取一个公共接口,将其公开并将其放在一个可以被两个项目引用的单独程序集中。
您可以将接口的所有属性设置为只读,以便使用者无法更改它们。
答案 2 :(得分:0)
我认为这就是你要找的东西:
答案 3 :(得分:-1)
这是internal
修饰符的要点 - 不允许这样做。将其更改为公共或使用某种代理类来向外部世界公开所需的功能。