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

为什么C#不需要名称空间或完整名称空间(完全限定名)?,c#,.net,namespaces,C#,.net,Namespaces,我一直在想这件事,但始终不明白为什么 简单的例子: public IEnumerator<Effect> GetEnumerator ( ) { return this.Effects.GetEnumerator ( ); } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator ( ) { return this.GetEnumerator ( ); } publi

我一直在想这件事,但始终不明白为什么

简单的例子:

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

System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator ( )
{
    return this.GetEnumerator ( );
}
public IEnumerator GetEnumerator()
{
返回this.Effects.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
返回this.GetEnumerator();
}
为什么必须指定:

System.Collections.IEnumerator

但不仅仅是:

集合。IEnumerator

我不是说这更好,但对我来说,这似乎是一个逐步解决碰撞的方法

因为有时存在嵌套得很深的类型,因此由于冲突而必须键入全名感觉很糟糕,而不仅仅是在类型前面加上包含该类型的直接名称空间,以便编译器可以尝试在当前导入/使用的名称空间中查找该类型

而且,当我第一次开始C#时,我总是发现自己在这样做,认为这就是它的工作方式。看到其他人对C#的新体验会有什么样的表现,这会很酷,因为他们以前从未使用过名称空间概念。

write

using System.Collections;

然后您可以编写简短的集合。IEnumerator

我想Foo Bah是想说:

using Collections = System.Collections;
请注意,此项的正确位置位于命名空间内部和类外部,如下所示:

namespace MyNamespace
{
    using SysCollections = System.Collections;

    public class MyClass
    {
        SysCollections.ArrayList mySampleField;
    }
}
我的意思是使用
SysCollections
来显示对别名命名没有限制

另外,请注意,
使用系统
正是您想要的“使用系统。*”

这是可行的,大多数人都会这么做:

using System;

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

因为没有使用System.*的

这将有助于:

namespace System
{

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


}

但是您不应该轻易地向
系统添加任何内容。

是的,对于本例,您可以这样做,但我的意思是要求那些具有冲突类型的名称空间,例如您不能同时导入两个名称空间,因此一个名称空间必须是完全限定的,但您认为可以从冲突类型中删除一些顶级名称空间。谢谢Henk,就像你说的“使用系统。*;”,我想要它。这是要求的功能吗?如果我的类型必须在另一个名称空间中,我也不能执行您的示例,对吗?