【介绍】.NET新加特性介绍
简介
当下的.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新加特性介绍的更多相关文章
- C# 5.0新加特性
		1. 异步编程 在.Net 4.5中,通过async和await两个关键字,引入了一种新的基于任务的异步编程模型(TAP).在这种方式下,可以通过类似同步方式编写异步代码,极大简化了异步编程模型.如下 ... 
- C# 2.0新加特性
		泛型(Generics) 泛型是CLR 2.0中引入的最重要的新特性,使得可以在类.方法中对使用的类型进行参数化. 例如,这里定义了一个泛型类: class MyCollection<T> ... 
- C# 7.0新加特性
		以下将是 C# 7.0 中所有计划的语言特性的描述.随着 Visual Studio “15” Preview 4 版本的发布,这些特性中的大部分将活跃起来.现在是时候来展示这些特性,你也告诉借此告诉 ... 
- C# 6.0新加特性
		1.自动属性的增强 1.1.自动属性初始化 (Initializers for auto-properties) C#4.0下的果断实现不了的. C#6.0中自动属性的初始化方式 只要接触过C#的肯定 ... 
- C# 4.0新加特性
		协变和逆变 这个在C#2.0中就已经支持委托的协变和逆变了,C#4.0开始支持针对泛型接口的协变和逆变: IList<string> strings = new List<strin ... 
- C# 3.0新加特性
		类型推断 申明变量的时候,可以不用直指定类型: var i = 5; var s = "Hello"; //两种写法是一样的 int i = 5; string s = " ... 
- jQuery Mobile 1.1八大新特性介绍
		随着HTML 5时代的来临,移动开发开始进入了一个新的时代,现在只需要懂得HTML5,配合一定的开发框架,就可以开发出十分漂亮的HTML5的移动应用.在众多的 移动HTML5开发框架中,比较著名的是j ... 
- jdk7和8的一些新特性介绍
		jdk7和8的一些新特性介绍 本文是我学习了解了jdk7和jdk8的一些新特性的一些资料,有兴趣的大家可以浏览下下面的内容. 官方文档:http://www.oracle.com/technetwor ... 
- php7函数,声明,返回值等新特性介绍
		使用 ... 运算符定义变长参数函数 (PHP 5 >= 5.6.0, PHP 7) 现在可以不依赖 func_get_args(), 使用 ... 运算符 来实现 变长参数函数. functi ... 
- GrapeCity Documents for Excel 文档API组件 V2.2 新特性介绍
		GrapeCity Documents for Excel 文档API组件 V2.2 正式发布,本次新版本包含诸多重量级产品功能,如:将带有形状的电子表格导出为 PDF.控制分页和电子表格内容.将Ex ... 
随机推荐
- JavaScript之jQuery要点记录
			一 属性和属性节点 1.什么是属性? 对象身上保存的变量就是属性 2.如何操作属性? 对象.属性名称 = 值; 对象.属性名称; 对象["属性名称"] = 值; 对象[" ... 
- C# IDataReader转换为Json
			1 /// <summary> 2 /// IDataReader转换为Json 3 /// </summary> 4 /// <param name="dat ... 
- 使用request对象实现注册示例,请求方式的编码问题
			get提交方式: method="get"和地址栏请求方式默认都属于get提交方式 get方式在地址栏显示请求信息﹐(但是地址栏能够容纳的信息有限,4-5KB;如果请求数据存在大文 ... 
- C++生成均匀分布的随机实数
			#include<random> #include<iostream> int main() { //定义均匀分布对象,均匀分布区间(a,b)为(2,6) std::unifo ... 
- 部门mysql操作
			use test_db; -- 删除表 drop table if exists t1_profit; drop table if exists t1_salgrade; drop table i ... 
- Navicat 连接MySQL数据库 报错2059
			Navicat 连接MySQL数据库 报错2059 - authentication plugin 'caching_sha2_password'的解决办法 2059 - Authentication ... 
- loadrunner入门(关联)
			左右边界:提取第一个id web_reg_save_param_ex( "ParamName=Id", "LB=//OK[ ... 
- beast加密
			Beast: https://github.com/liexusong/php-beast?tdsourcetag=s_pctim_aiomsgbeast-安裝到/root------------- ... 
- go设置http代理
			打算把之前python写的程序切换到golang, 结果调试时发现fiddler无法正常捕获go的http请求 需要设置代理才可以正常捕获 const HttpProxyUrl = "htt ... 
- Centos7安装nodejs(npm)
			执行命令: 设置yum安装源> curl --silent --location https://rpm.nodesource.com/setup_14.x | sudo bash (14是大的 ... 
