使同一文件夹中的类成为“朋友”的访问修饰符

本文关键字:朋友 访问 文件夹 | 更新日期: 2023-09-27 18:03:53

是否存在访问修饰符(如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,我该怎么做呢?

使同一文件夹中的类成为“朋友”的访问修饰符

如果你说的"文件夹"指的是"命名空间" -不是。所有。net访问修饰符都与名称空间无关。

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

  • 在同一个类中(私有访问)
  • 嵌套在另一个类中(对包含类的私有访问)
  • 在同一装配(内部访问)
  • 在另一个通过InternalsVisibleTo(内部访问)访问的装配中
  • 作为另一个类的子类(受保护的访问基类成员,在稍微复杂的规则中)
  • 其他(公共访问)

也有protected internal,但我永远不记得哪一种方式是有效的,我几乎从不使用它:)

所以如果你可以把类C放到不同的程序集中 a和B(它们彼此在同一个程序集中),那么你可以使构造函数a internal并得到你想要的结果。

内部是你要找的

不完全是,但有internal,它限制访问类在同一程序集(即项目)。