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#实现ini文件读写操作

    下面是关于” C#实现ini文件读写操作 “的完整攻略及示例。 1. 什么是ini文件? INI是initialization file缩写,可以翻译成”初始化文件”。在windows操作系统中,INI文件通常用于存储应用程 序的配置信息。这些信息包括文件路径、窗口大小、主题等等。 2. 如何实现ini文件读写操作? 在C#中,我们可以使用System.IO…

    C# 2023年6月1日
    00
  • C#中使用jieba.NET、WordCloudSharp制作词云图的步骤

    下面我将为您详细讲解 C# 中使用 jieba.NET 和 WordCloudSharp 制作词云图的步骤。 准备环境 首先,您需要准备好以下环境: .NET Framework 4.0 及以上版本; jieba.NET; WordCloudSharp。 安装 jieba.NET jieba.NET 是一个分词工具,可以将文本分解成单词。您可以将其安装到您的…

    C# 2023年5月31日
    00
  • C# URL短地址压缩算法及短网址原理解析

    下面是 “C# URL短地址压缩算法及短网址原理解析” 的完整攻略。 短网址原理解析 短网址,也称为短链接,是一种将网址进行短化以达到方便记忆和分享的方式。短网址一般由原始的URL地址经过一系列的转换算法生成,使其在不失去其唯一性的前提下更短。短网址的原理一般涉及通用字符编码、过程加盐、自增长等技术。 C# URL短地址压缩算法 下面是一种常见的URL短地址…

    C# 2023年6月8日
    00
  • C# Guid长度雪花简单生成器的示例代码

    下面是针对如何编写C# Guid长度的雪花简单生成器的攻略。 1. 为何选择C# Guid C# Guid(全称为全球唯一标识符)是一个128位的数字,由字母和数字构成,它具备全局唯一性,即全球内任意两个Guid的相同概率是非常低的。因此,我们可以利用Guid生成唯一字符串,例如用户ID、订单编号等。 2. 如何生成雪花ID 雪花ID是一种Twitter开源…

    C# 2023年6月1日
    00
  • 聊聊Unity自定义组件之序列帧播放组件问题

    下面是“聊聊Unity自定义组件之序列帧播放组件问题”的完整攻略。 序列帧播放组件问题 问题描述 在使用Unity制作游戏时,我们经常需要用到序列帧播放,比如动画、特效等,如果每一帧都手动添加到游戏对象身上,这是一件非常繁琐的事情。因此,我们可以通过自定义一个序列帧播放组件来实现自动播放序列帧的效果。 但是在实现这一功能的过程中,我们可能会遇到一些问题,比如…

    C# 2023年6月3日
    00
  • C#中的三种定时计时器Timer用法介绍

    下面我将为你详细讲解C#中的三种定时计时器Timer用法介绍的完整攻略。 1. 定时器Timer是什么? 定时器是一种常见的应用场景,比如日常使用的Android/IOS系统中的闹钟提醒功能、计数器功能等都需要定时器的支持。而在C#中,我们也可以使用定时器来实现某些需要定时执行的任务。 2. C#中的三种定时计时器Timer用法介绍 C#中,提供了三种常见的…

    C# 2023年6月1日
    00
  • 使用C#实现读取系统配置文件的代码实例讲解

    使用C#可以方便地读取系统配置文件,下面是一个完整的攻略,包含了读取系统配置文件的代码实例。 目录 探索系统配置文件 什么是系统配置文件 使用C#读取系统配置文件的代码实例 示例说明 探索系统配置文件 在计算机系统中,配置文件是一种文本文件,其中包含用于配置操作系统、应用程序或其他软件的参数和设置。此类文件通常与特定的应用程序或系统设置相关联。 什么是系统配…

    C# 2023年5月31日
    00
  • C# 如何判断两个文件内容是否相同的方法

    要判断两个文件的内容是否相同,可以通过计算两个文件的哈希值(hash)来进行比较。哈希值是数据的固定长度的数字表示,可以用于判断数据是否一致。 在C#中,可以使用System.Security.Cryptography命名空间中的MD5或SHA256等哈希算法计算文件的哈希值,并进行比较。 下面是一个使用MD5算法计算文件哈希值的示例代码: using Sy…

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