如何在C#中定义“匿名命名空间”?

时间:2014-03-17 05:24:22

标签: c# namespaces

在C ++中,为了定义一个只能在同一个文件中访问的符号,我们说

namespace 
{
    class my_private_class
    { ... }
}

但我可以在C#中做同样的事情吗?或者我必须说

namespace __DO_NOT_USE_OUT_OF_.xxx.cs__ 
{       
  public MyPrivateClass 
  { ... }
}

using __DO_NOT_USE_OUT_OF_.xxx.cs__;

(假设这是在一个名为xxx.cs的文件中)?  原因的后者将取决于其他程序员是否尊重。

2 个答案:

答案 0 :(得分:3)

C#中没有匿名命名空间,但您可以利用静态类

namespace MyNamespace // <- Just a namespace
{
    // Anonymous Namespace emulation:
    //   static class can't have instances and can't be inherited, 
    //   it's abstract and sealed
    internal static class InternalClass // or public static class
    {
        // private class, it's visible within InternalClass only  
        class my_private_class 
        { ... }
    }
}

答案 1 :(得分:1)

在C#中没有这样的东西,我们有一些名为access modifiers的东西来管理类型的可见性。

用法是针对某个类或方法,例如:

internal class MyType 
{

}

或者

protected void MyMethod() 
{

}

您必须选择适用于您的方案的那个,以下是详细信息:

公开

类型或成员可以由同一程序集中的任何其他代码或引用它的另一个程序集访问。

私人

只能通过同一个类或结构中的代码访问类型或成员。

受保护

类型或成员只能由同一个类或结构中的代码访问,或者在从该类派生的类中访问。

内部

类型或成员可以由同一程序集中的任何代码访问,但不能从另一个程序集访问。

受保护的内部

类型或成员可以由声明它的程序集中的任何代码访问,也可以从另一个程序集中的派生类中访问。来自另一个程序集的访问必须在一个类声明中进行,该声明派生自声明受保护的内部元素的类,并且它必须通过派生类类型的实例进行。