C#9.0:Init相关总结

C#9.0: Init相关总结

C# 9.0 中推出了 Init-only 属性,它是一个新的属性类型,与 get 和 set 不同,它只有一个初始化器。因此,一旦指定了初始值,就不能再更改属性。

1. Init-only 属性的定义

Init-only 属性可以在类、结构体以及接口中定义,语法如下:

public int Age { get; init; }

其中,init 关键字表示属性只能在初始化时设置值。

2. Init-only 属性的使用

通过 Init-only 属性的定义,我们可以在以下情况下使用它:

2.1 构造函数中初始化

在使用构造函数中初始化 Init-only 属性时,只能使用属性初始化器,而不能使用赋值语句。例如:

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

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

2.2 对象初始化器中初始化

通过对象初始化器也可以设置 Init-only 属性的值,例如:

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

2.3 只读属性初始化语法

C# 9.0 还提供了只读属性初始化语法,它可以在声明属性的同时将其初始化,语法如下:

public class Person
{
    public string Name { get; init; } = "Tom";
    public int Age { get; init; } = 18;
}

3. 示例说明

以下是两个使用 Init-only 属性的示例:

3.1 示例一

public class Point
{
    public int X { get; init; }
    public int Y { get; init; }
    public int Distance => Math.Sqrt(X * X + Y * Y);
}

class Program
{
    static void Main(string[] args)
    {
        Point point = new Point { X = 3, Y = 4 };
        Console.WriteLine($"Point ({point.X}, {point.Y}) is {point.Distance} units from the origin.");
    }
}

上述代码中,我们定义了一个名为 Point 的类,它包含两个 Init-only 属性 X 和 Y,以及一个计算属性 Distance,用于计算当前点到原点的距离。在实例化类时,我们通过对象初始化器为 X 和 Y 设置了初始值,而计算属性 Distance 则返回当前点到原点的距离。

3.2 示例二

public record Person(string Name, int Age)
{
    public DateTime Created { get; init; } = DateTime.UtcNow;
}

class Program
{
    static void Main(string[] args)
    {
        Person person = new Person("Tom", 18);
        Console.WriteLine($"Created at: {person.Created}");
    }
}

上述代码中,我们使用 C# 9.0 中新的 record(记录)类型来创建名为 Person 的类,它包含两个 Init-only 属性 Name 和 Age,以及一个只读属性 Created,用于保存记录创建的时间。当创建新的 Person 对象时,程序会自动为 Created 属性设置当前的世界标准时间。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#9.0:Init相关总结 - Python技术站

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

相关文章

  • C#类中方法的执行顺序是什么

    C#中类的方法执行顺序是按照继承层次关系和调用顺序决定的,具体执行顺序如下: 静态构造函数 非静态构造函数 静态方法 非静态方法 其中,静态成员在程序启动时就已经存在,因此静态构造函数是在其他方法之前第一个运行的。而非静态成员只有在实例化对象后才会存在,因此非静态构造函数是在静态构造函数之后但在其他方法之前运行的。 下面是两个简单的例子,说明类中方法的执行顺…

    C# 2023年6月1日
    00
  • 利用C#实现进程管理器

    利用C#实现进程管理器 概述 进程管理器是一款常见的系统工具,用于查看当前系统正在运行的进程,以及进行操作,例如结束进程,查看进程详细信息等等。本文将利用C#语言,实现一个进程管理器。 实现步骤 获取系统中所有的进程 利用.NET Framework提供的System.Diagnostics命名空间,可以很方便地获取当前系统中正在运行的进程。可以使用Proc…

    C# 2023年6月6日
    00
  • centos7系统下搭建docker本地镜像仓库的方法

    CentOS 7系统下搭建Docker本地镜像仓库的方法 Docker 是一种流行的容器化技术,可以帮助开发人员快速构建、测试和部署应用程序。在使用 Docker 时,通常需要使用 Docker 镜像仓库来存储和管理镜像。本攻略将介绍如何在 CentOS 7 系统下搭建 Docker 本地镜像仓库。 搭建步骤 以下是在 CentOS 7 系统下搭建 Dock…

    C# 2023年5月17日
    00
  • 聊聊.Net,Core配置Nlog.md的问题

    聊聊.Net Core配置NLog NLog是一个流行的日志记录库,它可以帮助我们在应用程序中记录日志。在本攻略中,我们将介绍如何在.Net Core应用程序中配置NLog,以便记录日志。以下是聊聊.Net Core配置NLog的完整攻略: 步骤一:安装NLog 首先,需要安装NLog。可以使用以下命令在.Net Core应用程序中安装NLog: dotne…

    C# 2023年5月17日
    00
  • asp.net(C#) 动态添加非ASP的标准html控件(如添加Script标签)

    在asp.net中,动态添加非ASP的标准html控件可以通过代码生成的方式实现。在代码中,可以通过使用System.Web.UI.HtmlControls.HtmlGenericControl类实例化一个具有特定标记名称(如 script )的html控件,并设置其属性等具体信息,然后将该控件添加到asp.net页面中。 以下是完整攻略: 在代码中实例化特…

    C# 2023年6月3日
    00
  • .Net Core和RabbitMQ限制循环消费的方法

    以下是使用.NET Core和RabbitMQ限制循环消费的方法的完整攻略: 1. 什么是RabbitMQ RabbitMQ是一个开源的消息代理,它实现了高级消息列协议(QP)标准。RabbitMQ可以用于构建分布式系统,它可以处理大量的消息,并确保消息的可靠传。 2. 什么是循环消费 循环消费是指在消息队列中,消费者不断地消费同一条,直到被确认为已处理。循…

    C# 2023年5月12日
    00
  • C# 动态输出Dos命令执行结果的实例(附源码)

    下面是对主题“C# 动态输出Dos命令执行结果的实例(附源码)”的详细讲解攻略。 1. 背景介绍 在C#中执行DOS命令并输出执行结果,通常采用Process类来实现。但如果要及时输出命令执行结果,我们需要借助于StandardOutput和BeginOutputReadLine两个属性和方法。 2. 具体步骤 2.1 创建Process实例 首先,我们需要…

    C# 2023年6月7日
    00
  • C#中DataSet转化为实体集合类的方法

    将C#中的DataSet转化为实体集合类的方法涉及到数据集合类和实体类之间的转换。下面是实现这个过程的攻略: 步骤一:创建实体类 首先,我们需要创建实体类。这个类必须符合我们数据库中表的结构。一个简单的实体类示例如下: public class User { public int Id { get; set; } public string Name { g…

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