在浏览一些遗留代码时,我发现您可以声明一个C#类而不将其放在命名空间中(在这种情况下,我有一个ASP.NET WebForms应用程序,并且某些Web表单未在任何命名空间中声明)。
此类上的GetType()
会返回namespace
属性设置为null
的类型。
我不知道这是允许的 - 有人可以建议为什么有一个未在命名空间内声明的类是理想的吗?
答案 0 :(得分:5)
这当然不是很好的做法。 确实使一些例子更容易,比如“hello world” - 也许C#设计师正在寻找代码高尔夫; p
但是,是的,这很奇怪。我不知道我们需要能够直接使用全局命名空间的任何响亮的原因。即使对于扩展方法,我宁愿添加一个using
指令来将它们带入......
有趣的是 - mscorlib.dll
中似乎有40多个,system.dll
中有20多个
var mscorlib = typeof(string).Assembly.GetTypes()
.Where(t => string.IsNullOrEmpty(t.Namespace)).ToList();
var system = typeof(Uri).Assembly.GetTypes()
.Where(t => string.IsNullOrEmpty(t.Namespace)).ToList();
(但所有私有/编译器生成的)
答案 1 :(得分:3)
或许允许与不支持命名空间的语言进行互操作。
<强>更新强>
经过一番洞察,我可以看到MS使用的案例。
所有.Net Framework程序集在全局命名空间中都有一些标准类,例如
这些类包含固定的元数据,否则这些元数据将更加困难或昂贵。我猜他们选择在全局命名空间中找到它们,这样它就是一个标准\传统的位置,工具\实用程序\等可以获得它们。此信息是bootstrapping \ meta信息,因此逻辑上位于命名空间的概念之上。