本质上record是一个实现了Equals()/GetHashCode()和ToString()的class

    record Person(int Id, string Name, int Age)  // 这3个都是只读属性
    {
        public string NickName { get; set; }   // 可写属性

        void Play()
        {
            Console.WriteLine($"ppp:{Name}");
        }
    }
      // 
      Person p1 = new Person(1, "p1", 11) { NickName = "n1" };
      Person p2 = new Person(1, "p1", 11) { NickName = "n2" };

      // false,因为NickName也参与比较
      Console.WriteLine(p1 == p2);

      // 使用with语法,可以复制record,再改一些属性。
      Person p3 = p1 with { };
      Console.WriteLine(p1 == p3);

      Person p4 = p1 with { Age = 12 };
      Console.WriteLine(p1 == p4);