c# 10在。net 6.0中支持一个名为global using directive的新特性。
它似乎做了两件事:
- 当你在全局使用中有一个命名空间时,你不必在*.cs文件的顶部包含该命名空间的
using ...
。 - 一些名称空间被隐式地添加到全局使用中,这取决于项目类型。
我知道我可以通过在我的项目文件中添加以下内容来禁用向全局使用中隐式添加名称空间:
<PropertyGroup>
<ImplicitUsings>disable</ImplicitUsings>
</PropertyGroup>
我的问题:
- 这个全局使用指令功能只是为了方便,以便一些经常使用的命名空间被全局包含,所以这些使用不会使*.cs文件的顶部混乱吗?
- 是否可以添加我自己的全局使用?
- 是否有可能删除一些隐式包含的全局使用(例如在名称冲突的情况下)?
- 这个全局使用指令功能有我没有想到的其他用途吗?
global-usings文件在顶部声明// <auto-generated/>
,所以我不能在这个文件中添加/删除/编辑global-usings。
这个全局使用指令特性只是为了方便,以便全局包含一些常用的名称空间,这样这些使用就不会使*.cs文件的顶部混乱?
是的,它们只是为了在使用名称空间时方便(减少混乱,创建全局别名,更容易管理名称空间)
是否可以添加我自己的全局使用?
是的,您可以通过将global using Some.Namespace;
添加到其中一个文件的顶部(您可以为此创建一个单独的文件)或通过在.cproj中添加以下内容来添加全局使用到项目:
<ItemGroup>
<Using Include="Some.Namespace"/>
</ItemGroup>
是否可以删除一些隐式包含的全局使用(例如,在名称冲突的情况下)?
是的,您可以使用
自动删除导入的名称空间(从使用ImplicitUsings
的项目默认导入中)<ItemGroup>
<Using Remove="Some.Namespace"/>
</ItemGroup>
这个全局使用指令功能有我没有想到的其他用途吗?
没有,除了前面提到的。
的有用链接:
- .NET 6中的using语句/指令在哪里?
- 每个SDK使用的隐式使用指令
Using
MSBuild prop- 全局使用指令特性规范
global
修饰符语言参考
- 大多数情况下是的。您可以将类从一个全局使用的名称空间移动到另一个名称空间,而无需更改源代码。这大大节省了重构的时间。
- 是的。代替
using namespace_name
,声明global using namespace_name
,就是这样!该声明可以在项目中的任何位置。理想情况下,创建一个import.cs
文件,并在其中声明所有全局使用的名称空间。- 是的。找到它被声明为
global using nameclashing_namespace
的地方,并删除全局字。- 我想不出除了上面的(1)之外的任何方法。
- 是的。找到它被声明为