除using指令外,哪些代码允许置于命名空间外部?
命名空间外部允许的代码元素
除了using指令外,C#里还有以下几种代码可以放在命名空间体的外部:
- 程序集特性:像
[assembly: AssemblyVersion("1.0.0.0")]、[assembly: AssemblyDescription("My Application")]这类直接作用于整个程序集的特性,必须定义在命名空间之外,用来标记程序集的元数据信息。 - extern别名指令:当你引用的多个程序集存在同名类型时,可以用
extern alias OldLib;这样的指令来区分不同程序集的类型,这类指令必须放在命名空间外部,甚至要在普通using指令之前。 - 顶级命名空间声明:我们平时写的
namespace MyApp.Services { ... }本身就是顶级元素,整个命名空间的定义就是在命名空间外部的,这是最基础的场景。 - 顶级类型定义:C#允许直接在命名空间外部定义类、结构体、接口、枚举、委托等类型,比如直接写
public class GlobalClass { ... },不过这种做法不推荐,因为类型会落入全局命名空间,很容易引发命名冲突。 - 文件级命名空间(C# 10及以上):C# 10新增的简化写法
namespace MyApp.Data;,直接放在文件顶部,属于命名空间外部的顶级声明,替代了传统的嵌套大括号写法。 - 全局using指令(C# 10及以上):比如
global using System.Collections.Generic;,这种using指令会作用于整个项目的所有文件,必须放在命名空间外部才能生效。
内容的提问来源于stack exchange,提问作者M14
相关产品推荐
相关产品推荐

