命名空间内的私有类

可能重复:
命名空间只有C#/ .NET中的类可见性?

我想要的是拥有一个只能在同一命名空间内的其他类访问的类,而不必将命名空间放在它自己的程序集中。

有没有理由在C#中这是不可能的?

编辑 :我已经改变了一点问题,因为编译器告诉我不允许private 。 谁能告诉我这个的原因?

除了gehho的答案:命名空间只是类型名称的一部分(它只允许所有类型具有唯一的名称) – 这就是为什么你不能限制对命名空间内的类型的访问。

这是不可能的。

您只能使用internal修饰符限制对包含该类的程序集的访问。

您还可以通过使类成为嵌套类来将对类的访问限制为单个类。 例如,如果您将类B作为A类中的私有嵌套类,则B只能由A访问。

我认为这两个选项是你能做的最好的选择。 如果您确实要限制对命名空间的访问,则必须将其放在单独的程序集中。

编辑:第二个问题:为什么不允许私人课程。 仅当私有类嵌套在另一个类中时才允许使用私有类。 如果您将非嵌套类设为私有,它的用途是什么? 无论如何你都无法访问它,所以你无法用它做任何事情。

您可以使用internal类限制对当前程序集的可见性。

但是,您可以允许其他程序集使用InternalsVisibleTo属性来查看程序集。

在程序集AssemblyOne中定义MyInternalClass:

 [assembly: InternalsVisibleTo("AssemblyTwo")] internal class MyClass { internal void DoSomeAction() { } } 

然后在AssemblyTwo中定义另一个类:

 public class MyOtherClass { public void DoAnotherAction() { MyClass c = new MyClass(); c.DoSomeAction(); } } 

因为您可以在任何其他外部程序集中向命名空间添加类型。 类型是否在同一名称空间中,但不同的程序集会看到您的“私有类型”?

如果不是,我们很难理解(命名空间中的一种类型可以看到您的类型,另一种类型 – 不 – )。 如果是,我们与“私有”的定义相矛盾,因为不同程序集中的类型可以访问程序集的“私有”细节。

您可以声明任意名称空间,因此您可以将自己的类声明为System名称空间的一部分。 当然,如果Microsoft决定在其命名空间中添加具有相同名称的类,则会导致错误。

为什么要拥有“命名空间可见性”? 这将意味着一种特殊的公共forms,因为任何人都可以将其类声明为所需的命名空间,从而访问您的类。

如果您希望它作为安全function,这将无法正常工作。 如果你想通过隐藏“内部”类来整理你的命名空间,你可以在主命名空间下面有一个Internals命名空间。