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# 的开发中,经常需要复制一份对象,以便于对该对象进行修改而不影响原来的对象。浅拷贝(shallow copy)只是简单地复制了一份对象的引用,而不是实际的对象,原始对象和副本对象共享引用类型的成员变量。而深拷贝(deep copy)则会创建一份新的对象,并复制原始对象所有的成员变量,包括引用类…

    C# 2023年5月31日
    00
  • 基于c# Task自己动手写个异步IO函数

    下面就来详细讲解“基于c# Task自己动手写个异步IO函数”的攻略。 1. 了解异步IO 异步IO(Asynchronous IO)是指用户空间应用程序在发起IO请求后立即返回控制权给操作系统,并且不需要等待IO操作完成,而是通过回调函数或者等待通知的方式来获取IO完成的结果。 相对于同步IO(Synchronous IO),异步IO能够充分利用计算机的多…

    C# 2023年5月15日
    00
  • 详解.Net core2.0日志组件Log4net、Nlog简单性能测试

    详解.Net core2.0日志组件Log4net、Nlog简单性能测试 在.NET Core 2.0应用程序中,日志记录是一个非常重要的组件。本攻略将深入探讨.NET Core 2.0中两个流行的日志组件Log4net和Nlog,并提供两个示例说明。 Log4net Log4net是一个流行的.NET日志记录组件,它提供了灵活的配置选项和高度可定制的输出格…

    C# 2023年5月17日
    00
  • .Net中的集合排序可以这么玩你知道吗

    当我们需要对一组数据进行排序时,集合排序是我们常用的手段之一。在 .Net 中,集合排序可以通过使用 Linq 的 OrderBy 和 OrderByDescending 方法来实现。 1. 升序排序 首先,我们需要定义一个包含一组数据的 List: List<int> numbers = new List<int> { 5, 3, …

    C# 2023年6月1日
    00
  • C#使用webbrowser的常见用法实例

    下面是 “C#使用webbrowser的常见用法实例” 的攻略详解。 概述 在 C# 中,WebBrowser 是一个非常有用的控件,它允许我们向程序内嵌一个浏览器以便于在应用程序中显示网页。WebBrowser 常用于开发 Windows 程序,如桌面应用程序、测试工具、爬虫等等。本篇攻略将介绍 WebBrowser 的常见用法实例。 安装WebBrows…

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

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

    C# 2023年5月31日
    00
  • C# Linq的Any()方法 – 确定序列中是否存在元素

    Any() 方法是 C# LINQ 中的一种用于判断集合中是否存在任何元素满足给定条件的方法。此方法的语法如下: bool Any<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate); 其中,source 是需要检查的集合,pr…

    C# 2023年4月19日
    00
  • C#使用BitConverter与BitArray类进行预定义基础类型转换

    下面是“C#使用BitConverter与BitArray类进行预定义基础类型转换”的完整攻略。 什么是BitConverter和BitArray类? 在C#中,我们可以使用BitConverter和BitArray类来进行预定义基础类型的转换。其中,BitConverter类用于在基本数据类型和字节数组之间进行转换,而BitArray类可以对比特位进行操作…

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