[英]A C# class with a null namespace
在浏览一些遗留代码时,我发现您可以声明一个C#类而不将其放在命名空间中(在这种情况下,我有一个ASP.NET WebForms应用程序,并且某些Web表单未在任何命名空间中声明)。
此类上的GetType()
返回一个类型,其中namespace
属性设置为null
。
我不知道这是允许的 - 有人可以建议为什么有一个未在命名空间中声明的类是可取的吗?
这当然不是很好的做法。 它确实使一些例子更容易,比如“你好世界” - 也许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();
(但是所有私有/编译器生成的)
也许允许与不支持命名空间的语言进行互操作。
更新
经过一番洞察,我可以看到MS使用的案例。
所有.Net Framework程序集在全局命名空间中都有一些标准类,例如
这些类包含固定的元数据,否则这些元数据将更加困难或昂贵。 我猜他们选择在全局命名空间中找到它们,这样它就是一个标准\\传统的位置,工具\\实用程序\\等可以获得它们。 此信息是bootstrapping \\ meta信息,因此逻辑上位于命名空间的概念之上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.