为什么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,就像你说的“使用系统。*;”,我想要它。这是要求的功能吗?如果我的类型必须在另一个名称空间中,我也不能执行您的示例,对吗?