为什么C#不需要命名空间或完整的命名空间(完全限定名称)?

时间:2011-02-15 22:31:52

标签: c# .net namespaces

我一直在考虑这个问题但从未理解为什么。

简单示例:

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#表现得如此新鲜,以前从未使用过命名空间概念。

3 个答案:

答案 0 :(得分:3)

我认为Foo Bah试图这样说:

using Collections = System.Collections;

请注意,这个位置在命名空间内和类外部的正确位置,如下所示:

namespace MyNamespace
{
    using SysCollections = System.Collections;

    public class MyClass
    {
        SysCollections.ArrayList mySampleField;
    }
}

我打算使用SysCollections来表明对别名命名没有限制。

另请注意,using System正是您所需的“使用系统。*”。

所以,这是有效的,这是大多数人会做的事情:

using System;

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

答案 1 :(得分:2)

using System.Collections;

然后你可以写短格式Collections.IEnumerator

答案 2 :(得分:1)

因为没有using System.*;

这样的东西

这样可行:

namespace System
{

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


}

但是你不应该轻易地向System添加任何内容。