C# 9.0新特性——只初始化设置器

当我们声明一个类时,经常需要为该类的字段或属性提供一个初始值,以确保在对象创建后这些值处于可用状态。在C# 9.0中,新特性“只初始化设置器”(init-only setters)允许我们在对象创建后,通过只读属性的方式对属性进行初始化。

什么是只初始化设置器

只初始化设置器(init-only setters)是C# 9.0中新出现的特性,只初始化设置器允许我们将某个属性的setter访问器定义为只读(init),从而在对象创建后,只允许通过构造函数或对象初始化器对该属性进行初始化操作。这样可以使得我们的代码更加健壮,同时也便于代码的维护和管理。

示例说明一

接下来,我们通过一个示例来演示只初始化设置器的使用方法。

public class Person
{
    public string Name { get; init; }
    public int Age { get; init; }
}

在上述代码中,我们声明了一个Person类,并定义了两个只读属性Name和Age,它们的setter被定义为init。这意味着在Person对象创建之后,我们无法再修改它们的值。现在我们来创建一个Person对象,并对这两个属性进行初始化。

Person person = new Person
{
    Name = "Tom",
    Age = 20
};

通过对象初始化器,我们可以按照Name和Age的顺序对属性进行初始化。由于这两个属性的setter被定义为只读,所以我们无法再使用person.Name和person.Age来修改它们的值。

示例说明二

我们也可以在构造函数中初始化只初始化设置器。接下来,我们通过一个示例来演示这种方法。

public class Person
{
    public string Name { get; init; }
    public int Age { get; init; }

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

在上述代码中,我们声明了一个构造函数,并在构造函数中对Name和Age属性进行初始化。下面是调用构造函数的示例。

Person person = new Person("Tom", 20);

通过构造函数,我们可以对属性进行初始化,而且一旦对象创建之后,无法再修改它们的值。

总结

只初始化设置器是C# 9.0中新出现的特性,它允许我们将某个属性的setter访问器定义为只读(init),从而在对象创建后,只允许通过构造函数或对象初始化器对该属性进行初始化操作。这样可以使得我们的代码更加健壮,同时也便于代码的维护和管理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 9.0新特性——只初始化设置器 - Python技术站

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

相关文章

  • jQuery获取地址栏参数插件(模仿C#)

    jQuery获取地址栏参数插件(模仿C#)是一个可以方便的获取URL参数的工具。下面是详细的攻略: 1. 插件的引入 首先需要在页面中引入jQuery库,然后才能引入该插件。可以使用以下代码: <script src="https://code.jquery.com/jquery-3.5.1.min.js"></scri…

    C# 2023年5月15日
    00
  • Untiy Shader实现纹理贴图滚动

    让我来详细讲解一下Unity Shader实现纹理贴图滚动的完整攻略。 简介 在游戏中,经常会出现需要让纹理贴图进行滚动的场景。比如,在一个街机游戏中,需要让背景贴图进行不断的水平或垂直移动,模拟出角色奔跑的效果。那么该如何实现这个效果呢?下面就让我们来看一下Unity Shader如何实现纹理贴图滚动。 Shader语言 在Unity Shader中,我们…

    C# 2023年6月7日
    00
  • c#使用windows服务更新站点地图的详细示例

    下面是“c#使用windows服务更新站点地图的详细示例”的完整攻略,本文将由以下几部分组成:需求分析、技术选型、开发流程和实现示例。 需求分析 我们需求是实现一个使用 Windows 服务来自动更新网站地图(SiteMap)的功能。这个服务需要能够自动遍历网站,根据业务逻辑生成站点地图,并更新网站。在此基础上,我们可以选择以特定的时间间隔来调度这个服务。 …

    C# 2023年5月31日
    00
  • 基于C#实现的轻量级多线程队列图文详解

    基于C#实现的轻量级多线程队列 简介 本文将介绍如何使用C#实现一个轻量级多线程队列,用于在高并发场景下,实现多线程之间的任务分发,以提高程序的效率。该队列使用了ConcurrentQueue和ManualResetEvent两个工具实现。 实现步骤 创建一个实现了IDisposable接口的队列类ThreadQueue,并在该类中定义私有字段: priva…

    C# 2023年6月6日
    00
  • C#委托初级使用的实例代码

    让我们来详细讲解“C#委托初级使用的实例代码”的完整攻略。 什么是委托? 在C#中,委托是一种特殊类型,它可以将方法作为参数传递给其他方法。换句话说,委托是C#中的函数指针,它可以使代码更加灵活和可扩展。 如何定义委托? 定义一个委托,可以使用 delegate 关键字。定义委托的语法如下: delegate returnType delegateName(…

    C# 2023年5月31日
    00
  • AspNet Core上实现web定时任务实例

    当我们需要在我们的Web应用中调度任务时,定时任务是一种非常重要的工具。在AspNet Core中,我们可以使用第三方库如Hangfire或Quartz等来实现定时任务。让我们更加详细地了解如何在AspNet Core中实现web定时任务。 第一步: 添加Hangfire参考 在AspNet Core Web应用中启用Hangfire定时任务,首先需要将Ha…

    C# 2023年6月3日
    00
  • c#实现简单控制台udp异步通信程序示例

    C#实现简单控制台UDP异步通信程序示例 1. 前言 本文介绍如何使用C#实现简单控制台UDP异步通信程序。UDP通信是一种面向无连接的通信方式,它在数据传输时不需要建立连接,可以在不可靠的网络传输中获得更好的性能。本文示例中使用C#提供的异步编程模型,以实现对UDP异步通信程序的实现。 2. 示例1:发送UDP数据 2.1 准备工作 首先,我们需要创建一个…

    C# 2023年6月6日
    00
  • 详解C# List<T>的Contains,Exists,Any,Where性能对比

    标题 详解C# List的Contains,Exists,Any,Where性能对比 简介 本文主要讲解C# List的Contains,Exists,Any,Where性能对比问题,通过对比测试实际运行时间来研究它们之间的优劣性。 正文 在实际的开发中,我们经常会需要在一个List中查找指定的元素。而C#中提供了多种查找方法,下面我们来看一下它们之间的性能…

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