Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使类位于同一文件夹中的访问修饰符;“朋友”;_C#_.net - Fatal编程技术网

C# 使类位于同一文件夹中的访问修饰符;“朋友”;

C# 使类位于同一文件夹中的访问修饰符;“朋友”;,c#,.net,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 } } } namesp

是否有一个访问修饰符(如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访问修饰符与名称空间相关

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

  • 属于同一类(专用访问)
  • 嵌套在另一个类中(对包含的类的私有访问)
  • 位于同一部件中(内部访问)
  • 在另一个程序集中,可通过
    内部访问访问
    (内部访问)
  • 作为另一个类的子类(在稍微复杂一点的规则内,受保护地访问基类成员)
  • 其他任何内容(公共访问)

还有
受保护的内部
,但我永远记不起哪种方法有效,而且我几乎从未使用过:)


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

internal是您要查找的内容

不完全是,但有,它限制了对同一程序集中的类的访问(即project).

受保护的内部
既受保护又具有内部可见性;没有什么新奇的东西,只是两个概念的结合。@dlev:所以它的限制性比其中任何一个都小?这是我永远记不起来的…至少我是这么理解的。这更像是或。外部派生类型具有访问权限,内部类型具有访问权限。因此,在程序集ABC中,类B可以访问类A的
受保护的内部
成员。在程序集定义中,类C可以从类A继承并访问受保护的内部成员。@Naor:您可以将B嵌套在A中。这是唯一的选择,如果所有的东西都必须在同一个程序集中,我只希望B能实例化A,我怎么做?我只希望B能实例化A,我怎么做?你肯定在找内部关键字吗?信任与您一起工作的人,而不是使用您的部件的人。NET没有一个不信任同事的解决办法。@hanspassant:我不认为这是信任的问题,而更像是约束。