C#9新特性init only setter的使用

下面是"C#9新特性initonlysetter的使用"的完整攻略。

简介

在C# 9中,推出了一个新的修饰符 init。与 set 不同, init 可以在构造函数中初始化值,并保证在构造函数执行完后,其值不能再次修改。这种属性的更新只能在创建对象和构造函数之间进行。这个新特性非常有意义,因为它可以让我们以更安全和可维护的方式创建不可变的对象。

使用

使用 init-only setter 可以在属性声明中使用 init。定义使用 init-only setter 的属性后,可以在构造函数中进行初始化。

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

    public Person(string firstName, string lastName)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
    }
}

在上述代码中,FirstNameLastName 的属性使用 init-only setter 设置,在构造函数 Person(string firstName, string lastName) 中可以设置这些属性的值。

当我们使用 init 时,属性的值就不能够在进行修改了。例如:

Person person = new Person("John", "Doe");
// 正确
Debug.Log(person.FirstName);  // "John"
// 以下代码会导致编译时期抛出异常
person.FirstName = "Tom";

上面的代码通过取消对 FirstName 属性的 set 访问器来创建了一个只读属性。在触发构造函数完成之后,我们不能再次修改这个值。

示例

现在我们考虑另一个示例,使用 init-only setter 开发一个 Point 类。除外,这个类还对连续的点进行了统计,最后一个点的值是不可修改的。

public class Point
{
    public int X { get; init; }
    public int Y { get; init; }

    public Point(int x, int y)
    {
        this.X = x;
        this.Y = y;

        Count++;
        LastPoint = this;
    }

    public static int Count { get; init; }
    public static Point LastPoint { get; init; }
}

在上述代码中,我们使用 init-only setter 来创建了 Count 和 LastPoint 静态属性。

现在,我们可以创建 Point 对象,并统计它们的数量和最后一个点。

Point p1 = new Point(10, 20);  
Point p2 = new Point(30, 40);

// Count 和 LastPoint 都是只读的
Debug.Log(Point.Count);  // 2
Debug.Log(Point.LastPoint.X);  // 30

// 错误,不能修改最后一个点
Point.LastPoint.X = 50;

在这个示例中,我们使用了 init-only setter 和静态属性,在 Point 中建立了一个简单的点对象。我们还演示了 Count 和 LastPoint 属性的使用方法。由于 Count 和 LastPoint 是只读的,所以我们不能修改它们的值。

这就是“C#9新特性init-only setter的使用”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#9新特性init only setter的使用 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • C#实现公式计算验证码的示例详解

    下面我将详细讲解“C#实现公式计算验证码的示例详解”的完整攻略。 背景介绍 验证码是一种防止机器恶意访问或者提交信息的有效手段。而公式计算验证码则是其中的一种,通过让用户计算简单公式的方式来验证用户身份。下面将介绍如何使用C#来实现公式计算验证码。 步骤说明 步骤一:生成验证码公式 首先,需要生成一个简单的验证码公式,这里以三个随机数字相加为例。代码如下: …

    C# 2023年6月7日
    00
  • c# 屏蔽快捷键的实现示例

    接下来我将详细讲解“C# 屏蔽快捷键的实现示例”的完整攻略,包含两个示例说明: 1. 使用WinAPI的方式屏蔽快捷键 1.1 前置知识 使用 C# 中屏蔽快捷键需要了解很多底层 Windows API 函数的使用方法,其中包括: SetWindowsHookEx 函数:用于钩取键盘操作 UnhookWindowsHookEx 函数:用于取消键盘钩子 Cal…

    C# 2023年6月7日
    00
  • 描述C#多线程中lock关键字的使用分析

    下面是“描述C#多线程中lock关键字的使用分析”的完整攻略。 Lock关键字的作用 在C#多线程编程中,我们经常需要使用共享资源,例如某个数据结构,多线程并发访问这个数据结构是不可避免的,这时候就需要通过控制临界区域来避免多个线程同时访问同一份数据造成的竞态条件问题。Lock关键字就是用来实现线程同步的机制,保障了程序在并发情况下的安全性。 Lock关键字…

    C# 2023年5月15日
    00
  • ASP.NET Core开发环境安装配置

    ASP.NET Core是一个跨平台的开源Web框架,用于构建现代化的Web应用程序。在本攻略中,我们将详细讲解如何安装和配置ASP.NET Core开发环境。 安装.NET Core SDK:首先,我们需要安装.NET Core SDK。我们可以从Microsoft官网下载并安装.NET Core SDK。安装完成后,我们可以在命令行中运行dotnet -…

    C# 2023年5月16日
    00
  • C#计算器编写代码

    以下是关于”C#计算器编写代码”的完整攻略: 1. 确定需求 在开始编写任何程序之前,首先需要明确程序的需求,即需要实现哪些功能。对于一个计算器程序,主要功能应该包括以下几个部分: 能够显示数字和符号的界面 能够进行加减乘除等基本运算 能够进行小数点的输入 能够进行连续的计算,即前一个计算结果可以作为后一个计算的输入 能够清空当前输入的数据 除了上述基本功能…

    C# 2023年5月31日
    00
  • C# Console.ReadLine()方法: 从标准输入流读取下一行字符

    Console.ReadLine() 是 C# 中的一个方法,可以从控制台中读取一行字符串,并将其作为结果返回。具体来说,该方法会等待用户在控制台中输入一个字符串,然后将用户输入的字符串作为一个字符串值返回。该方法是 System.Console 的一个成员方法,可用于在控制台中与用户进行交互。 使用方法: string input = Console.Re…

    C# 2023年4月19日
    00
  • C#表达式和运算符详细解析

    C#表达式和运算符详细解析 表达式和运算符简介 在C#中,表达式指的是由操作数和运算符组成的计算式。而运算符则是被用于操作数据的符号。C#支持多种运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符等。 算术运算符 C#支持基本的算术运算符,包括加、减、乘、除、取模。 int x = 1; int y = 2; int result = x + y; /…

    C# 2023年5月31日
    00
  • IIS6 安装与配置.net 2.0过程的详细图解

    IIS6安装与配置.net2.0过程的详细图解 IIS6是Windows Server 2003操作系统中自带的Web服务器软件,可以用于托管ASP.NET应用程序。本文将提供详细的“IIS6安装与配置.net2.0过程的详细图解”的完整攻略,包括如何安装IIS6和配置.net2.0,以及示例。 安装IIS6 以下是安装IIS6的步骤: 打开“控制面板”-&…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部