随着C#语言的不断发展,新版本的Visual Studio也不断推出。本文将基于GitHub上的公开设计讨论,探讨C# 7.0的一些潜在新特性,并分享Visual Studio 15预览版的安装和使用体验。
在最近的//build大会上,了解到了更多关于Visual Studio 15的信息。现在,甚至可以下载到Visual Studio 15的公开预览版。这个预览版提供了两种安装方式:一种是传统的安装程序,另一种是新的轻量级安装程序,后者安装速度更快,但支持的场景较少。
已经在机器上安装了这两种版本的Visual Studio 15,它们可以并行安装,机器运行良好。(机器上还安装了Visual Studio 2015,它没有受到影响。需要注意的是,这仍然是预发布软件,应该谨慎使用。)
在//build大会上,团队宣布语言更新将比以前更快。这是个好消息,但也有一些代价。一些原本计划在C# 7.0中推出的特性可能会推迟到C# 7.0之后的版本。
例如,“私有保护”特性和“非空引用类型”(在NDC的演讲中提到过,但还没有在本博客系列中讨论)可能会被推迟。
现在,让讨论一下“与表达式”的添加,它使得处理不可变类型变得更加容易。不可变类型正变得越来越常见,它们使得多线程代码更容易管理。当共享数据不可变时,不会产生问题。
然而,处理不可变类型可能会变得非常繁琐。任何更改都意味着创建一个新对象,并用原始对象的所有属性初始化它,除了想要更改的那个属性。
与表达式旨在解决这个问题。在最基本的用法中,假设已经创建了一个不可变的Person对象:
var scott = new Person("Scott", "Hanselman");
稍后,可能需要一个几乎相同但必须有不同的姓氏的对象:
var coolerScott = scott with { LastName = "Hunter" };
这个简单的例子展示了语法,但没有提供使用该特性的充分动机。创建一个新对象并显式设置两个字段,通过调用构造函数几乎同样简单。
在现实世界的场景中,当需要初始化更多字段时,与表达式变得更加有用。想象一个更广泛的Person类,包括雇主、工作地址等。当一个人接受新角色时,创建新对象的代码变得更加繁重。这些都是样板代码。这代表了大量增加的繁忙工作,但增加的价值很小。在这些情况下,与表达式是好朋友。
在前面的部分中,提到了一个提案,如果With()方法不可用,将回退到构造函数。这种设计的优势是,与表达式将适用于所有现有类型。要求With()方法的优势是,它支持更丰富的位置和名称映射。
但是还有更多的问题。在上面的场景中,假设Person类型是其他类型的基类:Teacher、Student、Teaching Assistant、Tutor、Advisor。使用Person类型的变量的与表达式是否应该在任何派生类型上正确工作?目标是启用这些场景。可以在2月的C#设计笔记中阅读当前的想法。
与表达式是C#中一个将使处理不可变类型更加愉快和自然的语法特性。这些特性将使创建想要支持的设计变得更加容易。这是C#的“成功之坑”设计目标的一部分:使正确的设计更容易实现。