什么是C#6中的(建议)"记录"课程?

Ian*_*ose 5 c# c#-6.0

我相信这从未进入C#6k,但可能会考虑在以后发布.

我刚刚阅读了一篇非常令人困惑的博客,其中讨论了C#6中的模式匹配和记录类以及运算符"is".

有人可以通过这样的方式向我概述所有这些内容,因为我可以理解它对C#6发布后对C#代码的影响.

(请注意,这与数据库无关!但谷歌认为它确实......)


在C#6和VB 12中首先阅读了模式匹配,然后在C#6和VB 12中找到更容易的不可变对象 - 以其他顺序读取它们会更加明显.

如果Record类解决了:

目前,大多数ORM和序列化程序不支持不可变类型.相反,他们假设将有一个无参数构造函数和可变属性.

通过标准化不可变类型的创建方式的问题,我可以看到它们很好,无论模式匹配如何.

Rah*_*thi 7

这里:

这本质上是一个仅由其构造函数定义的不可变类.以下是规范中的示例:

public record class Cartesian(double x: X, double y: Y);
Run Code Online (Sandbox Code Playgroud)

除了构造函数之外,编译器还会自动创建:

  • 每个参数的只读属性
  • 等于功能
  • GetHashCode覆盖
  • ToString覆盖
  • 一个"是"运算符,在VB中称为"匹配"

我刚读过这个提议:记录和普通的旧CLR对象

想象一下所谓的"记录",一种带有命名数据成员的有序列表的类型.并不是说应该有一种新的类型称为"记录类型"以及类和结构......事实上,最好不要使用新类型,因为我们可能需要类似记录的类和结构.

提议1:可以使用primary-constructor语法定义记录,它是扩展形式的语法糖,如下所示......

class Point(int X, int Y);

==>

class Point(int X, int Y)
{
   public int X { get; } = X;
   public int Y { get; } = Y;
}
Run Code Online (Sandbox Code Playgroud)

规则是:"当您编写记录时,它会自动生成PRIMARY PROPERTIES的属性,除非您自己提供了这些属性".术语"主要属性"是指主构造函数语法中的参数.因此,如果您不希望它自动生成属性,则必须提供该属性的自己版本,如下例所示.(没有办法说你不希望使用这种语法的属性:如果你不想要属性,那么根本不要使用该功能).

class Point(int X, int Y) { public int X => 15; }

==>

class Point(int X, int Y)
{
   public int X => 15;
   public int Y {get; set;} = Y;
}
Run Code Online (Sandbox Code Playgroud)