C# 9是一个充满了新特性的版本,其中最显著的新特性之一是引入了record类型、模式匹配以及init属性等内容。
Record类型
record类型是C# 9中新增的一种类型,用来描述对象的数据以及行为。其与class类型相似,但是有一些显著的区别:
- Record是一个不可变的类型,即其生成实例后其中的属性值不可更改
- Record类型默认实现了Equals、GetHashCode、ToString等方法,且这些方法可以进行自定义的扩展
- Record类型支持解构和with表达式
举个例子:
public record Person(string Name, int Age, string Address);
var p1 = new Person("Zhang San", 18, "Beijing");
var p2 = p1 with { Age = 20 };
if (p1 == p2)
{
Console.WriteLine("p1 equals to p2");
}
上面例子中定义了一个Person类型,并给出了一组初始值进行赋值。接下来使用了with表达式对其中的Age属性进行了更新,并使用了==运算符对比了p1和p2的对象是否相等。
模式匹配
模式匹配是C# 9中另一个值得关注的特性,其在switch语句和if语句中都可以使用。模式匹配可以通过对已知的类型进行类型判断,并用类型转换的内容来获取其属性和方法。
举个例子:
object obj = "hello, world";
if (obj is string str && str.Length > 0)
{
Console.WriteLine(str);
}
上面例子中对变量obj进行了类型判断和转换操作,如果其所代表的类型是string类型,那么则继续进行后续代码的执行,否则则跳出if语句。
Init属性
C# 9中,对于初始化一个对象的过程进行了简化。通过init属性,可以在定义变量的时候对变量进行初始化,并且可以在后续的代码中对其属性进行修改。
举个例子:
public class Person
{
public string Name { get; init; }
public int Age { get; init; }
}
var p1 = new Person { Name = "Zhang San", Age = 18 };
p1.Name = "Li Si";
上面例子中定义了一个Person类,其中所有属性都使用了init属性,这意味着可以在生成实例的时候对其内部属性进行初始化,且后续不可再进行更改。之后使用了p1.Name = "Li Si"的方式对其name属性进行修改,这是不允许的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#9特性record 类型、模式匹配、init 属性详情 - Python技术站