虽然经历了一些遗留代码,但我发现您可以声明C#类而不将它放入命名空间中(在这种情况下,我有一个ASP.NET WebForms应用程序和一些Web窗体没有在任何名称空间内声明)。具有空命名空间的AC#类
A GetType()
在这样的类上返回一个类型,其中namespace
属性设置为null
。
我不知道这是允许的 - 任何人都可以提出为什么希望有一个没有在名称空间内声明的类?
虽然经历了一些遗留代码,但我发现您可以声明C#类而不将它放入命名空间中(在这种情况下,我有一个ASP.NET WebForms应用程序和一些Web窗体没有在任何名称空间内声明)。具有空命名空间的AC#类
A GetType()
在这样的类上返回一个类型,其中namespace
属性设置为null
。
我不知道这是允许的 - 任何人都可以提出为什么希望有一个没有在名称空间内声明的类?
这当然不是很好的做法。它确实使一些例子更容易,像“你好世界” - 也许C#设计师要去代码高尔夫球; p
但是,这是一个奇怪的。我不知道有任何响亮的理由,我们需要能够直接使用全局命名空间。即使是扩展方法,我宁愿加using
指令给他们带来...
有趣的是 - 似乎有在mscorlib.dll
和20多名40多这样的system.dll
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();
(但所有私有/编译器生成的)
我能想到的一个基本原理就是让简单的例子更简单。但是名称空间的概念本身就相当简单,而且也是一个相当基本的概念...... – 2011-01-05 10:56:57
也许允许与不支持命名空间的语言进行互操作。
更新
一个小洞穴探险之后,我可以看到,MS使用情况。
所有.Net Framework程序集在全局命名空间中都有一些标准类,例如
这些类包含罐装的元数据,否则将难以\昂贵得到。我猜他们选择在全局名称空间中定位这些名称空间,以便它们成为tools \ utilities \ etc可以获取的标准\常规位置。这些信息是引导\元信息,因此逻辑上位于命名空间的概念之上。
看起来有可能,但我不禁想到,在与BCL交谈时,任何此类语言都会受到严重损害 – 2011-01-05 10:50:50
哦,我不知道。我创建的东西并不总是(明确地)存在于类或名称空间中,但是我又一次使用小黑客动态语言;) – delnan 2011-01-05 10:45:28