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#入门教程之集合ArrayList用法详解

    C#入门教程之集合ArrayList用法详解 什么是ArrayList? ArrayList是C#中的一种集合,其可存储任意类型的元素,并且可以动态增加或删除元素。与数组相比,ArrayList的大小可以动态变化,使其更加灵活。 ArrayList的基本用法 创建和初始化ArrayList 使用ArrayList时,需要先实例化一个ArrayList对象,然…

    C# 2023年6月1日
    00
  • ASP.NET MVC4 HtmlHelper扩展类,实现分页功能

    ASP.NET MVC4是一种Web应用程序框架,它提供了一种模型-视图-控制器(MVC)的架构模式,用于构建可扩展的Web应用程序。在ASP.NET MVC4中,HtmlHelper是一个非常有用的类,它提供了许多有用的方法,例如生成HTML标记、表单、分页等。在本文中,我们将介绍如何使用HtmlHelper扩展类来实现分页功能。 步骤一:创建HtmlHe…

    C# 2023年5月17日
    00
  • 关于c#中单例模式的一些问题

    下面给您详细讲解关于C#中单例模式的一些问题。 什么是单例模式? 单例模式是一种常见的设计模式,其定义为:确保一个类只有一个实例,并提供一个全局访问点。这意味着在整个应用程序中,只会有一个该类的实例存在,而且该实例可以被任何部分访问并进行更改。 为什么要使用单例模式? 单例模式主要用于节省系统资源,因为在某些情况下,多个实例的存在会带来很大的性能影响,而只有…

    C# 2023年6月7日
    00
  • .aspx中的命名空间设置实现代码

    在ASP.NET Web应用程序中,代码文件(.aspx和.asax)的最顶部通常会引入命名空间,以便在这些页面中使用.NET框架中的类。 在.aspx页面中,我们可以使用<%@ Page %>指令指定页面的属性,其中包含要使用的命名空间。具体步骤如下: 打开你想要更新的.aspx文件。 在Page指令中添加<%@ Import %>…

    C# 2023年5月31日
    00
  • Unity Shader片段着色器使用基础详解

    Unity Shader片段着色器使用基础详解 Unity中的Shader(着色器)用于控制游戏对象的渲染方式,让它们变得更加美观、细致。Shader分为顶点着色器和片段着色器,这篇攻略主要介绍Unity中片段着色器的使用基础,可以帮助开发者更加细致地控制对象的渲染方式。 Shader基础知识 在进入片段着色器的详细使用说明前,我们先来了解一些Shader的…

    C# 2023年6月3日
    00
  • C#中读取App.config配置文件代码实例

    下面就给您详细讲解一下在C#中读取App.config配置文件的完整攻略。 什么是App.config? 在C#项目中,App.config是存放配置信息的文件,经常用来保存应用程序的配置信息,比如数据库连接字符串、路径等等。在项目中对于一些数据的统一管理是非常有用的,修改方便,且使用配置文件时只需要修改App.config即可不用修改代码。 读取App.c…

    C# 2023年6月1日
    00
  • C#中的虚方法和抽象方法的运用

    C#中的虚方法和抽象方法是面向对象编程中的重要概念,它们可以帮助程序员实现多态性和继承关系。下面我来详细讲解一下它们的运用。 虚方法 基本概念 虚方法是指在基类中声明的方法,子类可以选择性地重写(override)它,在运行时具有多态效果。虚方法使用 virtual 关键字来修饰。 示例说明 我们可以使用一个简单的图形类作为示例,来演示虚方法的应用。我们先定…

    C# 2023年6月7日
    00
  • C#如何获取枚举的描述属性详解

    获取枚举的描述属性在日常C#开发中是一个常见需求。我们可以通过反射的方式获取枚举成员上的Description属性,从而获取枚举成员对应的描述信息。下面是详细的攻略: 一、为枚举成员添加Description属性 要获取枚举成员的描述信息,我们首先需要为每个枚举成员添加相应的Description属性,例如: public enum Gender { [De…

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