从另一个项目访问内部类

时间:2014-02-03 12:21:21

标签: c# internal

我想知道是否可以从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”。

我觉得创建包含相同变量的几个类是浪费时间并使代码不可读。有没有更好的方法来实现这个目标?

4 个答案:

答案 0 :(得分:17)

您可以使用InternalsVisibleTo属性并提供可以在程序集中查看internal类型的特定程序集的名称。

话虽如此......我认为你正在接受过度设计。如果Settings类只属于程序集A ...不要将它放在程序集B中......将它放在程序集A中。

答案 1 :(得分:2)

是的,使用InternalsVisibleTo,但我只建议为单元测试项目执行此操作。

否则,您应该提取一个公共接口,将其公开并将其放在一个可以被两个项目引用的单独程序集中。

您可以将接口的所有属性设置为只读,以便使用者无法更改它们。

答案 2 :(得分:0)

答案 3 :(得分:-1)

这是internal修饰符的要点 - 不允许这样做。将其更改为公共或使用某种代理类来向外部世界公开所需的功能。