我一直在考虑这个问题但从未理解为什么。
简单示例:
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#表现得如此新鲜,以前从未使用过命名空间概念。
答案 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
添加任何内容。