在 C# 10 及以上版本中,引入了 全局 using(Global using)特性,这允许开发者在项目级别声明 using 命名空间,从而简化代码的书写和维护。全局 using 的主要作用是提高代码的可读性和减少重复声明。
全局 using 的基本概念
全局 using 的声明方式可以使指定的命名空间在整个项目中可用,而不需要在每个文件的顶部重复书写。这对于大型项目尤为重要,因为它们往往包含多个文件,并使用许多相同的命名空间。
如何使用全局 using
- 在 .csproj 文件中设置全局 using
使用 .csproj 文件配置全局 using 是最常用的方式。你可以在项目文件中添加 元素,例如:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Using Include="System.Collections.Generic" />
<Using Include="System.Linq" />
<Using Include="System.Threading.Tasks" />
</ItemGroup>
</Project>
添加这一块配置后,System.Collections.Generic、System.Linq 和 System.Threading.Tasks 就会在项目中全局可用。
另外,如果csproj中启用了
<ImplicitUsings>enable</ImplicitUsings>
示例
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
</Project>
ImplicitUsings
是在 C# 10 和 .NET 6 中引入的一个特性,它可以自动为你的项目包含常用的 using 指令,从而简化代码文件的书写。该特性旨在提高开发效率,减少在每个文件中手动添加常用命名空间的需要。
默认包含的命名空间
启用 ImplicitUsings 后,通常会自动包含以下一些常用的命名空间:
- System
- System.Collections.Generic
- System.IO
- System.Linq
- System.Net.Http
- System.Threading
- System.Threading.Tasks
- Microsoft.AspNetCore.Mvc(在 ASP.NET Core 项目中)
具体包含的命名空间可能会因项目类型而有所不同。
- 在代码文件中声明全局 using
你可以在任何 .cs 文件中使用 global using 关键字来声明全局 using 指令。例如:
global using System;
global using System.Collections.Generic;
global using System.Linq;
一般将这所有using统一放在某个 .cs 文件的顶部,如 GlobalUsings.cs,以便于管理。
示例
创建一个名为 GlobalUsings.cs 的文件,内容如下:
// GlobalUsings.cs
global using System;
global using System.Collections.Generic;
global using System.Linq;
然后你可以在任何其他 C# 文件中直接使用这些命名空间而无需再次声明:
// SomeFile.cs
public class SampleClass
{
public void SampleMethod()
{
var list = new List<int> { 1, 2, 3 };
var sum = list.Sum();
Console.WriteLine(sum);
}
}
注意事项
-
命名空间冲突:当两个全局 using 指令引入了相同的命名空间或类型时,可能会引发命名冲突。在这种情况下,显式使用的 using 指令将优先于全局 using 指令。
-
可读性:虽然全局 using 指令减少了重复代码,但过度使用可能会影响代码的可读性,尤其是当多个开发者在同一项目中工作时,因此要谨慎管理和使用。