简介
当下的.Net新版本引进了几种新特性,包括全局命名空间引用、可空引用类型和顶级语句。这些特性在一定程度上改善了 .NET 平台的开发效率, 对于短小精干的小程序,这些新的特性无疑可以把开发效率提高到新的高度。
正文
全局引用命名空间
在之前的版本中,如果想在整个项目中使用同一个命名空间中的类型,我们需要在每个文件里都使用 using 指令导入对应的命名空间。但是使用全局命名空间引用特性后,我们只需要在程序集级别的文件中添加一个全局的命名空间导入,就可以在整个项目中使用该命名空间内的类型。
下面是一个使用全局命名空间引用特性的示例:
// 文件名称: GlobalUsings.cs
// 该文件为程序集级别的文件,添加在项目的根目录下
global using System.Text.Json;
global using Microsoft.Extensions.Options;
//添加两个常用的命名空间
namespace MyProject
{
// ... 程序集其他代码
}
![点击并拖拽以移动](/i/l/?n=23&i=blog/3171097/202304/3171097-20230423121328065-19318424.gif)
上述代码中,代码文件 GlobalUsings.cs 引用了全局命名空间,分别导入了 System.Text.Json 和 Microsoft.Extensions.Options 命名空间。这样,在项目的其他代码文件中就可以直接使用 System.Text.Json 和 Microsoft.Extensions.Options 的类型,而不用每个文件都导入相应的命名空间了。
需要注意的是,全局命名空间引用特性仅适用于 .NET 6 及以上版本,并且需要在程序集级别的文件中使用。此外,如果多个全局命名空间引用特性引用相同的命名空间时,编译器将忽略所有但第一个声明。
可为空引用类型
在.NET 新版本中,新增了 nullable 特性。这个特性可以作为可空引用类型的一种方便的替代方式,它能让代码更加简洁和易读。
在nullable特性中,我们可以使用‘?’代替可空引用类型。
假如我们需要对一个方法是否接受null值进行一个意图声明,在此之前没有比较好的办法去表达意图,而新增加的可为空引用类型可以很好的表达
/// <summary>
/// 表明此方法name不接受null,而address接受null
/// </summary>
/// <param name="name"></param>
/// <param name="address"></param>
public void NullableMethod(string name,string? address)
{
}
![点击并拖拽以移动](/i/l/?n=23&i=blog/3171097/202304/3171097-20230423121328065-19318424.gif)
通过编译器警告,可以让开发者更明确的知道某些可为空引用类型是不是存在null的可能性,减少NullRefrenceException异常。可以通过"!"和"?"和判断来消除警告,让代码意图清晰。
顶级语句
using System;
Console.WriteLine("Hello, world!");
![点击并拖拽以移动](/i/l/?n=23&i=blog/3171097/202304/3171097-20230423121328065-19318424.gif)
使用顶级语句特性,可以在一个文件中直接编写 C# 代码,编译器会自动将这些代码生成为一个程序集。这个特性可以减少代码文件数量、简化程序结构,并提高代码编译和运行速度。但需要注意的是,使用顶级语句特性,会在编译时自动创建一个默认的命名空间,因此文件中不能再包含其他命名空间或类。并且一个项目只能有一个文件使用顶级语句特性
总结
1. .NET 7 中的全局命名空间引用特性可以在一个项目的全局范围内导入命名空间,从而减少代码中使用 using 指令导入命名空间的重复头部的工作。
2. 可空类型(Nullable Type)是.NET中的值类型,在表示这些类型的变量时,允许变量持有 null 值。在.NET 8中新增了 nullable 特性以简化编码。使用 nullable 特性,我们可以使用 '?' 代替可空类型,使代码更加简洁易读。
3. 顶级语句特性是自 .NET 5 起推出的,它使程序员可以更方便地编写和运行小程序,而无需创建额外的类和方法。使用顶级语句特性,程序员可以在一个文件中直接编写 C# 代码,编译器会自动将这些代码生成为一个程序集。