我相信这从未进入C#6k,但可能会考虑在以后发布.
我刚刚阅读了一篇非常令人困惑的博客,其中讨论了C#6中的模式匹配和记录类以及运算符"is".
有人可以通过这样的方式向我概述所有这些内容,因为我可以理解它对C#6发布后对C#代码的影响.
(请注意,这与数据库无关!但谷歌认为它确实......)
我在C#6和VB 12中首先阅读了模式匹配,然后在C#6和VB 12中找到更容易的不可变对象 - 以其他顺序读取它们会更加明显.
如果Record类解决了:
目前,大多数ORM和序列化程序不支持不可变类型.相反,他们假设将有一个无参数构造函数和可变属性.
通过标准化不可变类型的创建方式的问题,我可以看到它们很好,无论模式匹配如何.
从这里:
这本质上是一个仅由其构造函数定义的不可变类.以下是规范中的示例:
Run Code Online (Sandbox Code Playgroud)public record class Cartesian(double x: X, double y: Y);
除了构造函数之外,编译器还会自动创建:
- 每个参数的只读属性
- 等于功能
- 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)