【问题标题】:Why does C# requires either no namespaces or full namespaces (fully qualified name)?为什么 C# 不需要命名空间或完整的命名空间(完全限定名称)?
【发布时间】:2011-02-15 22:31:51
【问题描述】:

我一直在想这个,但不明白为什么。

简单示例:

public IEnumerator<Effect> GetEnumerator ( )
{
    return this.Effects.GetEnumerator ( );
}

System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator ( )
{
    return this.GetEnumerator ( );
}

为什么要指定:

System.Collections.IEnumerator

但不只是:

Collections.IEnumerator

我并不是说这更好,但对我来说,这似乎是解决冲突的逐步方法。

因为有时有非常深的嵌套类型,所以因为冲突而不得不输入全名感觉很糟糕,而不是仅仅在类型前面加上包含它的直接命名空间,以便编译器可以尝试在当前导入/使用的命名空间。

此外,当我第一次开始使用 C# 时,我总是发现自己在这样做,并认为这就是它的工作方式。看到其他人对 C# 新鲜,以前从未使用过命名空间概念的行为会很酷。

【问题讨论】:

    标签: c# .net namespaces


    【解决方案1】:

    我认为 Foo Bah 想说的是:

    using Collections = System.Collections;
    

    注意这个的正确位置是在命名空间内和类外,像这样:

    namespace MyNamespace
    {
        using SysCollections = System.Collections;
    
        public class MyClass
        {
            SysCollections.ArrayList mySampleField;
        }
    }
    

    我的意思是使用SysCollections 来表明该别名命名没有任何限制。

    另外,请注意 using System 正是您想要的“使用 System.*”。

    所以,这行得通,而且这是大多数人会做的:

    using System;
    
    namespace MyNamespace
    {
        public class MyClass
        {
            Collections.ArrayList mySampleField;
        }
    }
    

    【讨论】:

      【解决方案2】:

      using System.Collections;
      

      那么你就可以写成简写Collections.IEnumerator

      【讨论】:

      • 是的,对于这个例子,你可以这样做,但我的意思是要求那些有冲突类型的,比如你不能导入两个命名空间,所以一个必须是完全限定的,但在想,你可以离开从碰撞类型中取出一些顶级命名空间。
      【解决方案3】:

      因为没有using System.*;这样的东西

      这可行:

      namespace System
      {
      
         /*System.*/Collections.IEnumerator GetEnumerator ( )
         {
             return this.GetEnumerator ( );
         }
      
      
      }
      

      但是你不应该轻易的给System添加任何东西。

      【讨论】:

      • 谢谢 Henk,我想要它,就像你说的“使用 System.*;”。这是要求的功能吗?如果我的类型必须在另一个命名空间中,我也不能做你的例子,对吧?
      猜你喜欢
      • 2017-08-09
      • 2019-07-10
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      相关资源
      最近更新 更多