访问修饰符,使类在同一文件夹中“朋友”

时间:2011-07-29 21:16:27

标签: c# .net

是否有访问修饰符(如public,private等)使所有类在同一名称空间(在同一文件夹中)成为朋友?

示例:

namespace MYPROJ.As {
public class A {
    _______ A() {....}
}
}

namespace MYPROJ.As {
public class B {
    public DoSomething() {
        new A();   //I WANT THIS TO WORK
    }
}
}

namespace MYPROJ.Cs {
public class C {
    public DoSomething() {
        new A();   //I DON'T WANT THIS TO WORK
    }
}
}

修改

我希望只有B能够实现A.我是怎么做到的?

3 个答案:

答案 0 :(得分:5)

如果通过“文件夹”你真的是指“命名空间” - 没有。 .NET访问修饰符根本不与命名空间相关。

基本上控制可访问性的是:

  • 在同一个班级(私人访问)
  • 嵌套在另一个类中(对包含类的私有访问)
  • 在同一个程序集(内部访问)
  • 通过InternalsVisibleTo(内部访问权限)进入另一个可以访问的程序集
  • 作为另一个类的子类(对基类成员的受保护访问,在稍微复杂的规则内)
  • 其他(公共访问)

还有protected internal,但我永远无法记住哪条路有效,我几乎从不使用它。)

因此,如果您可以将C类放入与A和B不同的程序集(它们彼此在同一个程序集中),那么您可以将构造函数设为A internal并得到你想要的结果。

答案 1 :(得分:0)

内部是你正在寻找的东西

答案 2 :(得分:0)

不完全,但有internal,它限制了对同一个程序集(即项目)中类的访问。