C# 11 预览版

此预览版中的新功能遵循 C# 11 的三个投资主题:

  • 开发人员生产力:我们添加了更多语言功能以提高您的工作效率。 新的扩展特性:
nameof

required成员允许您编写需要caller设置某些属性的类和结构类型。参考这个

Person 

类型:

public class Person
{
    public string FirstName { get; init; }
    public string LastName {get; init; }
}

caller应该使用对象初始值设定项来设置

FirstName
LastName

属性的值。但在 Visual Studio 17.3 之前,编译器无法强制caller必须设置这些属性。需要参数的构造函数是确保用户设置

FirstName
LastName

属性的唯一方法。required成员需向编译器和caller传达他们必须设置这些属性。将

required 

修饰符添加到成员声明中:

public class Person
{
    public required string FirstName { get; init; }
    public required string LastName {get; init; }
}

所有caller都必须包含

FirstName
LastName

属性的对象初始值设定项,否则编译器会发出错误提示。编译器通知caller 有required成员未初始化。开发人员必须立即解决这个问题。

Person

类型是为早期版本编写的并且包含设置属性的构造函数,您仍然可以使用required成员。您应该使用

SetsRequiredMembers

属性标注任何现有的构造函数:

public class Person
{
    public required string FirstName { get; init; }
    public required string LastName {get; init; }
    [SetsRequiredMembers]
    public Person(string firstName, string lastName)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
    }

    public Person() {}
}
SetsRequiredMembers

属性表示构造函数设置所有required成员。编译器知道使用

Person (string firstName, string lastName)

构造函数的调用者已经设置了required成员。无参数构造函数不包含该属性,因此使用该构造函数的调用者必须使用对象初始化器初始化所有required成员。

上面的示例使用了属性,但您也可以将required成员应用于字段声明。

ref struct

类型中的

ref

字段提供了可用性。您还可以使用

scoped

关键词来限制

ref

参数的生命周期。功能提案和更新的更改现在提供了有关此功能的最佳文档。我们发现了一些需要更改语言才能安全使用的场景。更新的更改将在一个稍后发布的预览中提供,文档将反映最终设计。

在接口中添加静态抽象和虚拟成员为通用数学打下了了许多重要的基础。该功能允许接口声明运算符以及其他静态方法。实现接口的类就像在接口中声明的其他方法一样必须提供

静态抽象

方法的实现。编译器在编译时解析对

其他语言特性消除了数字类型的一些差异,从而更容易编写通用数学算法。右移运算符不再要求第二个操作数是

int

,而是 任何整数类型都可以!

nint
nuint

类型分别是

System.IntPtr
System.UIntPtr

的同义词。这些关键字可以用来代替这些类型。事实上,新的分析器会提示您选择关键字而不是类型名称。最后,当您执行无符号移位时,无符号右移运算符 (

>>>

) 避免了强制转换。

综上所述,这些更改和检查运算符等其他更改支持通用数学运行时更改。语言改进意味着运行时团队可以对 .NET 中的所有数字类型进行改进。当您的类型使用运算符或其他静态方法实现合约时,您也可以利用这些功能。

nameof
nameof

运算符,如下例所示:

[return: NotNullIfNotNull(nameof(url))]
string? GetTopLevelDomainFromFullUrl(string? url)
LangVersion

设置为

Preview

来尝试新的功能。

这个 Visual Studio 预览版让我们离 C# 11 的完整功能集更近了一步。我们在该版本中继续对多个主题进行投资。我们已经根据您给我们的反馈进行了修正。现在是下载预览版试用所有新功能并给我们提供反馈的好时机。我们正在关注 C# 11 和 .NET 7 并进行最终的更新。

Original: https://blog.csdn.net/helendemeng/article/details/126787764
Author: 微软技术栈
Title: C# 11 预览版

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/636278/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球