下面是"C#9新特性initonlysetter的使用"的完整攻略。
简介
在C# 9中,推出了一个新的修饰符 init
。与 set
不同, init
可以在构造函数中初始化值,并保证在构造函数执行完后,其值不能再次修改。这种属性的更新只能在创建对象和构造函数之间进行。这个新特性非常有意义,因为它可以让我们以更安全和可维护的方式创建不可变的对象。
使用
使用 init-only setter
可以在属性声明中使用 init
。定义使用 init-only setter
的属性后,可以在构造函数中进行初始化。
public class Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
public Person(string firstName, string lastName)
{
this.FirstName = firstName;
this.LastName = lastName;
}
}
在上述代码中,FirstName
和 LastName
的属性使用 init-only setter
设置,在构造函数 Person(string firstName, string lastName)
中可以设置这些属性的值。
当我们使用 init
时,属性的值就不能够在进行修改了。例如:
Person person = new Person("John", "Doe");
// 正确
Debug.Log(person.FirstName); // "John"
// 以下代码会导致编译时期抛出异常
person.FirstName = "Tom";
上面的代码通过取消对 FirstName
属性的 set 访问器来创建了一个只读属性。在触发构造函数完成之后,我们不能再次修改这个值。
示例
现在我们考虑另一个示例,使用 init-only setter
开发一个 Point 类。除外,这个类还对连续的点进行了统计,最后一个点的值是不可修改的。
public class Point
{
public int X { get; init; }
public int Y { get; init; }
public Point(int x, int y)
{
this.X = x;
this.Y = y;
Count++;
LastPoint = this;
}
public static int Count { get; init; }
public static Point LastPoint { get; init; }
}
在上述代码中,我们使用 init-only setter
来创建了 Count 和 LastPoint 静态属性。
现在,我们可以创建 Point 对象,并统计它们的数量和最后一个点。
Point p1 = new Point(10, 20);
Point p2 = new Point(30, 40);
// Count 和 LastPoint 都是只读的
Debug.Log(Point.Count); // 2
Debug.Log(Point.LastPoint.X); // 30
// 错误,不能修改最后一个点
Point.LastPoint.X = 50;
在这个示例中,我们使用了 init-only setter
和静态属性,在 Point
中建立了一个简单的点对象。我们还演示了 Count 和 LastPoint 属性的使用方法。由于 Count 和 LastPoint 是只读的,所以我们不能修改它们的值。
这就是“C#9新特性init-only setter的使用”的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#9新特性init only setter的使用 - Python技术站