C# 使类位于同一文件夹中的访问修饰符;“朋友”;
是否有一个访问修饰符(如public、private等)可以使同一命名空间(同一文件夹中)中的所有类成为好友 例如: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
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:我不认为这是信任的问题,而更像是约束。