新特性

来源:https://mp.weixin.qq.com/s/4uW6z8yvTt89_y9OyK_y5g

1.record 类型(record 是引用类型,跟 class 很像(确实差不多))

 

Cat pet1 = new Cat
{
    Nick = "松子",
    Name = "Jack",
    Age = 1
};
Cat pet2 = new Cat
{
    Nick = "松子",
    Name = "Jack",
    Age = 1
};
// 居然不是同一只猫
Console.WriteLine("同一只?{0}", pet1 == pet2);

答案是  否

换成 ecord   答案就     是

record 类型让你省去了重写相等比较(重写 Equals、GetHashCode 等方法或重载运算符)的逻辑。

 实际上,代码在编译后 record 类型也是一个类,但自动实现了成员相等比较的逻辑。以前你要手动去折腾的事现在全交给编译器去干。

 

2.属性的 init 访问器(只用于只读属性的初始化阶段)

以前:初始化靠构造函数

public class Dog
{
    public int No { get; } = 0;
    public string Name { get; } = "no name";
    public int Age { get; } = 1;
    public Dog(int no, string name, int age)
    {
        No = no;
        Name = name;
        Age = age;
    }
}

现在:把后面的set  设置为 init; 

public class Dog
{
    public int No { get; init; }
    public string Name { get; init; }
    public int Age { get; init; }
}

实例化时直接为属性赋值。

 

Dog x = new Dog
{
No = 100,
Name = "吉吉",
Age = 4
};

 

posted @ 2020-11-26 15:41  乌柒柒  阅读(128)  评论(0编辑  收藏  举报