简介

当下的.Net新版本引进了几种新特性,包括全局命名空间引用、可空引用类型和顶级语句。这些特性在一定程度上改善了 .NET 平台的开发效率, 对于短小精干的小程序,这些新的特性无疑可以把开发效率提高到新的高度。

正文

全局引用命名空间

在之前的版本中,如果想在整个项目中使用同一个命名空间中的类型,我们需要在每个文件里都使用 using 指令导入对应的命名空间。但是使用全局命名空间引用特性后,我们只需要在程序集级别的文件中添加一个全局的命名空间导入,就可以在整个项目中使用该命名空间内的类型。

下面是一个使用全局命名空间引用特性的示例:

// 文件名称: GlobalUsings.cs
// 该文件为程序集级别的文件,添加在项目的根目录下 global using System.Text.Json;
global using Microsoft.Extensions.Options;
//添加两个常用的命名空间 namespace MyProject
{
// ... 程序集其他代码
}

上述代码中,代码文件 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)
{ }

通过编译器警告,可以让开发者更明确的知道某些可为空引用类型是不是存在null的可能性,减少NullRefrenceException异常。可以通过"!"和"?"和判断来消除警告,让代码意图清晰。

顶级语句

using System;

Console.WriteLine("Hello, world!");

使用顶级语句特性,可以在一个文件中直接编写 C# 代码,编译器会自动将这些代码生成为一个程序集。这个特性可以减少代码文件数量、简化程序结构,并提高代码编译和运行速度。但需要注意的是,使用顶级语句特性,会在编译时自动创建一个默认的命名空间,因此文件中不能再包含其他命名空间或类。并且一个项目只能有一个文件使用顶级语句特性

总结

1. .NET 7 中的全局命名空间引用特性可以在一个项目的全局范围内导入命名空间,从而减少代码中使用 using 指令导入命名空间的重复头部的工作。



2. 可空类型(Nullable Type)是.NET中的值类型,在表示这些类型的变量时,允许变量持有 null 值。在.NET 8中新增了 nullable 特性以简化编码。使用 nullable 特性,我们可以使用 '?' 代替可空类型,使代码更加简洁易读。



3. 顶级语句特性是自 .NET 5 起推出的,它使程序员可以更方便地编写和运行小程序,而无需创建额外的类和方法。使用顶级语句特性,程序员可以在一个文件中直接编写 C# 代码,编译器会自动将这些代码生成为一个程序集。

【介绍】.NET新加特性介绍的更多相关文章

  1. C# 5.0新加特性

    1. 异步编程 在.Net 4.5中,通过async和await两个关键字,引入了一种新的基于任务的异步编程模型(TAP).在这种方式下,可以通过类似同步方式编写异步代码,极大简化了异步编程模型.如下 ...

  2. C# 2.0新加特性

    泛型(Generics) 泛型是CLR 2.0中引入的最重要的新特性,使得可以在类.方法中对使用的类型进行参数化. 例如,这里定义了一个泛型类: class MyCollection<T> ...

  3. C# 7.0新加特性

    以下将是 C# 7.0 中所有计划的语言特性的描述.随着 Visual Studio “15” Preview 4 版本的发布,这些特性中的大部分将活跃起来.现在是时候来展示这些特性,你也告诉借此告诉 ...

  4. C# 6.0新加特性

    1.自动属性的增强 1.1.自动属性初始化 (Initializers for auto-properties) C#4.0下的果断实现不了的. C#6.0中自动属性的初始化方式 只要接触过C#的肯定 ...

  5. C# 4.0新加特性

    协变和逆变 这个在C#2.0中就已经支持委托的协变和逆变了,C#4.0开始支持针对泛型接口的协变和逆变: IList<string> strings = new List<strin ...

  6. C# 3.0新加特性

    类型推断 申明变量的时候,可以不用直指定类型: var i = 5; var s = "Hello"; //两种写法是一样的 int i = 5; string s = " ...

  7. jQuery Mobile 1.1八大新特性介绍

    随着HTML 5时代的来临,移动开发开始进入了一个新的时代,现在只需要懂得HTML5,配合一定的开发框架,就可以开发出十分漂亮的HTML5的移动应用.在众多的 移动HTML5开发框架中,比较著名的是j ...

  8. jdk7和8的一些新特性介绍

    jdk7和8的一些新特性介绍 本文是我学习了解了jdk7和jdk8的一些新特性的一些资料,有兴趣的大家可以浏览下下面的内容. 官方文档:http://www.oracle.com/technetwor ...

  9. php7函数,声明,返回值等新特性介绍

    使用 ... 运算符定义变长参数函数 (PHP 5 >= 5.6.0, PHP 7) 现在可以不依赖 func_get_args(), 使用 ... 运算符 来实现 变长参数函数. functi ...

  10. GrapeCity Documents for Excel 文档API组件 V2.2 新特性介绍

    GrapeCity Documents for Excel 文档API组件 V2.2 正式发布,本次新版本包含诸多重量级产品功能,如:将带有形状的电子表格导出为 PDF.控制分页和电子表格内容.将Ex ...

随机推荐

  1. 采用4-20mA电流的模拟量传输

    工业上常用的总线协议RS232,RS485等,都是传输数字信号的方式.工业上普遍需要测量各类非电物理量,例如温度.压力.速度.角度等,这些都需要转换成模拟量电信号才能传输到几百米外的控制室或显示设备上 ...

  2. 【BFS】算法模板与思路

    1.BFS算法的基础理论是什么? BFS算法名叫宽度优先搜索,虽然我能理解深度优先搜索,但我却不是很能理解宽度优先搜索. 一个很关键的点在于:宽度优先搜索是一个迭代的算法,不是递归的算法. 与DFS之 ...

  3. HTML5的语义标签

    H5新增了很多标签,也更加语义化了,但是除了header.footer.nav等,其他的还真的没有去了解过,今天整理一下H5新增的语义化标签. Header: 不用多说,就是定义头部,可以多个. Fo ...

  4. ASP.NET的MVC模式中分布页和布局页的使用

    大概描述一下,分布页是布局页的一部分,分布页就相当于小图标,布局页就相当于PPT模板,PPT模板可以加入一些小图标(分布页),你只需要改改内容就好,视图创建的时候要选择包含布局页的 首先,去Contr ...

  5. 网络存储服务ip-san搭建

                                         网络存储服务ip-san搭建 ip-san简称SAN(Storage Area Network),中文意思存储局域网络,ip- ...

  6. keycloak(转载)

    # 生成KEYSTORE.JKS keytool -genkeypair -alias keycloak.me -keyalg RSA -keystore keycloak.jks -validity ...

  7. group by和union,Laravel分页

    $res3 = DB::table('users') ->join('user_folow_boutiques', 'user_folow_boutiques.user_id', '=', 'u ...

  8. Python笔记--练习题(都来瞧一瞧,看一看嘞)

    利用Python对文件进行操作 重新写入的文件如下图所示: 统计学生成绩文件的最高分最低分和平均分 Python如何统计英文文章出现最多的单词 Python统计目录下的文件大小 Python按照文件后 ...

  9. Spring 事务——源码分析

    [事务环境搭建工作]:链接注解 @EnableTransactionManagement:在配置类中添加注解@EnableTransactionManagement,便开启了事务功能.此注解也是了解S ...

  10. Nacos 实现 AP+CP原理[Raft 算法 NO]

    来源于网络 一.什么是 Raft算法 Raft 适用于一个管理日志一致性的协议,相比于 Paxos 协议 Raft 更易于理解和去实现它.为了提高理解性,Raft 将一致性算法分为了几个部分,包括领导 ...