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技术站