简介

当下的.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. FTP文件夹错误:【打开FTP服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹】

    资源管理器访问FTP服务器报错,提示FTP文件夹错误:[打开FTP服务器上的文件夹时发生错误.请检查是否有权限访问该文件夹]. 详细信息: 200 Switching to ASCII mode. 2 ...

  2. JAVA获取MultipartFile文件的MD5

    Java获取文件的MD5,核心都是通过JAVA自带的MessageDigest类来实现. 获取文件MD5值主要分为三个步骤: 第一步获取文件的byte信息, 第二步通过MessageDigest类进行 ...

  3. python之pyqt5-第一个pyqt5程序-图像压缩工具(2.5版本,加入多线程进度条与文件drop)-小记

    (如想转载,请联系博主或贴上本博地址) 题外:关于python的多线程 python因为GIL的原因,只能利用到单核CPU性能.如程序内多是计算或循环,多线程无啥意义:如程序内多IO操作,多线程可以避 ...

  4. 【Leetcode】 剑指offer:链表(简单)--Day02

    剑指Offer 06. 从尾到头打印链表 可借助栈. 或先遍历列表得到元素数,开辟数组空间倒序填入. 剑指 Offer 24. 反转链表 可借助栈: class Solution { public L ...

  5. C# 读取json文件并转为List集合

    using (System.IO.StreamReader file = System.IO.File.OpenText(pathForSaving)) { using (JsonTextReader ...

  6. vue项目 运行内存溢出

    运行vue项目报错,内存溢出!!! <--- Last few GCs ---> [10400:00000218A86135D0] 173902 ms: Mark-sweep (reduc ...

  7. SpringBoot整合RocketMQ案例实战

    一.概念 rocketMQ是一款典型的分布式架构下的中间件产品,使用异步通信方式和发布订阅的消息传输模型,具备异步通信的优势,系统拓扑简单,上下游耦合较弱,主要应用于异步解耦,流量削峰填谷等场景 二. ...

  8. 在wxpython框架写的GUI中调用GIF格式图片,显示在指定行列的方法

    #首先需要从 wx.adv 模块导入 Animation, AnimationCtrl方法 from wx.adv import Animation, AnimationCtrl #然后在面板实现过程 ...

  9. 接入HMS Core应用内支付服务过程中一些常见问题总结

    华为HMS Core应用内支付服务(In-App Purchases,IAP)为应用提供便捷的应用内支付体验和简便的接入流程.该服务支持客户端和服务端两种开发形式,具体可以参考官方文档. 往期文章:常 ...

  10. Mybatis # 与 $ 符号区别

    一.区别 1.不同点: 以#{}方式传入参数,预编译时,它会将sql中的#{}替换为?,然后编译sql时,会把值两端加上 双引号.有效防止sql注入,保证数据安全. sql注入:通过把SQL命令插入到 ...