[译文] C# 已成旧闻, 向前, 抵达 C# 9!

C# 8 is old news. Onward, to C# 9! (C# 8 已成旧闻, 向前, 抵达 C# 9!)

Did you know that planning is already underway for the ninth version of the C# language?

第九版 C# 语言已经在开发中了, 你晓得伐?

Now, to be fair, this has been in the planning phases long, LONG, before C# 8 shipped to us back in September 2019, as you can see from some of the discussion on the issues themselves. Most folks don’t follow the day-to-day planning of the language itself (myself included), but it’s interesting to peer into the discussions every now and then.

现在, 公平地讲, 在 C# 8 于2019年9月交付给开发者之前, 这个已经在计划阶段 很久很久很久 了. 可以从一些关于 C# 9 的 issues 的讨论中看到. 大多数人不太会遵循语言本身的日常规划(连我自己都是), 但时不时地参与下讨论还是蛮有意思.

And, since this is Christmas Day, let’s peek in on five (there are a LOT more!) C# 9 language “gifts” we might receive sometime in 2020 (subject to change, of course!)

并且, 由于今天是圣诞节(作者是2019年12月25日写的这篇文章), 所有让我们悄悄咪咪地看下五个 (还有更多!) 关于C# 9 的 "礼物", 我们很有可能在2020年的某天收到(当然, 可能也不会!).

1. Simplified Parameter NULL Validation Code (简化 NULL 参数验证代码)

The short version is that by decorating the value of a parameter to a method with a small annotation, we simplify the internal logic by not needing null validation / guard clauses, thus reducing boilerplate validation code. For example:

简化版是通过在 方法参数 上带有一个小注解以装饰 参数, 这样就不需要做 null 检测或守卫子句, 从而简化了内部的逻辑, 减少样板验证代码. 比如:

// Before (之前)
void Insert(string s) {
 if (s is null) {
   throw new ArgumentNullException(nameof(s));
 }
 ...
}

// After (现在, 参数后面加了个叹号)
void Insert(string s!) {
  ...
}

2. Switch expression as a statement expression (Switch 表达式作为语句表达式)

This one is still in the discussion phase, but the general idea is to allow a switch expression as an expression statement. For example:

这个仍处于讨论阶段, 但总体思路是允许将 switch 表达式作为 expression 语句. 例如:

private void M(bool c, ref int x, ref string s)
{
  c switch { true => x = 1, false => s = null };
}

or

或者

private void M(bool c, ref int x, ref string s)
  => c switch { true => x = 1, false => s = null };

3. Primary Constructors (主构造函数)

This one means to simplify all those boilerplate constructors, fields, property getters/setters, etc., that we’re so used to. For example:

意味着简化所有的我们之前习惯的那些样板构造函数, 字段, 属性存取器等. 例如:

// From This: (从这种形式)
class Person
{
    private string _firstName;

    public Person(string firstName)
    {
        _firstName = firstName;
    }

    public string FirstName
    {
        get => _firstName;
        set {
          if (value == null) {
              throw new NullArgumentException(nameof(FirstName));
          }
          _firstName = value;
        }
    }
}

//To This: (到这种形式)
class Person(string firstName)
{
    public string FirstName
    {
        get => firstName;
        set {
          if (value == null){
            throw new NullArgumentException(nameof(FirstName));
          }
          firstName = value;
        }
    }
}

4. Record (记录)

Slightly similar in nature to Primary Constructions (mentioned above), the goal of this proposal is to remove the necessity of writing so much boilerplate code when creating a new class / struct. It seems possible that if Record types make it in, that Primary Constructors will not (opinion). For example:

与上面提到的基本结构在本质上稍微相似, 该建议的目的是在创造新类/结构体时, 消除编写大量必要的样板代码. 如果 记录 类型出现, 那么 主构造函数 就不再有了(意见). 例如:

//From Something Like This: (从类似于这样的)
public class Person
{
  public string Name { get; }
  public DateTime DateOfBirth { get; }

  public Person(string Name, DateTime DateOfBirth)
  {
    this.Name = Name;
    this.DateOfBirth = DateOfBirth;
  }
}

//To Something Like This (到类似于这样)
public class Person(string Name, DateTime DateOfBirth);

5. Discriminated Unions / enum class (可辨识联合 / 枚举类)

This one took a smidge to wrap my brain around. It uses keywords that we’re all used to (plus a new one), combines them together, and adds Record’s (mentioned above) into the mix. It is, in my own words, a “cleaner” way of creating abstract base classes, and concrete types that inherit from them. For example:

这个让我有点摸不着头脑. 它使用我们都惯用的关键字(加上一个新关键字), 将它们组合在一起, 并将记录 (上面提及的) 添加到混合中. 用我们自己话说, 它是创建抽象基类和继承自它们的具体类型的 "更简洁" 的方法. 比如:

(译者注: Discriminated Unions, 可辨识联合/可区分的联合. 也称变体类型(variant type), 通常是某一个枚举类型, 包含一个联合和一个标签的数据结构. 能够存储一组不同但是固定的类型中某个类型的对象, 具体是哪个类型由标签字段决定. 这种数据结构在解释器, 数据库和数据通信中非常有用. 链接: 标签联合)

// From Something Like This: (从类似于这样的)
public partial abstract class Shape { }

public class Rectangle : Shape {

  public float Width { get; }
  public float Length { get; }

  public Rectangle(float Width, float Length){
    this.Width = Width;
    this.Length = Length;
  }
}

public class Circle : Shape {

  public float Radius { get; }

  public Circle(float Radius)
  {
    this.Radius = Radius;
  }
}

// To Something Like This: (到类似于这样的)
enum class Shape
{
  Rectangle(float Width, float Length);
  Circle(float Radius);
}

These five proposals only skim the surface of the discussions going on around C# 9. Head over to the GitHub project, take a look, and even get involved! It’s a new Microsoft, and our opinions are welcome!

这五个提案仅仅只是围绕 C# 9 正在进行的讨论做的简要介绍, 可以到 GitHub 项目看一看, 甚至可以参与进来! 这是一个新的全新的微软, 我们的意见将受到欢迎!

Since I’m the final post of the year, I’d like to offer a major thank you to everyone that volunteered, wrote, tweeted, retweeted, liked, hearted, shared, read, etc., to this amazing event.

由于这是我今年最后一篇博文, 因此我要向在这项令人赞叹的活动中自干五的人致以深深的感谢.

This community…OUR community, is comprised of amazing folks, and I consider myself grateful to even be considered a part of it.

这个社区, 我们的社区, 是由非常棒棒的人组成的, 我超开心自己被认为是这个社区的中的一份子.

Whatever holiday you celebrate this time of year, I hope it’s wonderful.

不管每年的这个圣诞节庆祝什么, 我都希望它是棒棒哒.

See you next year, friends.

朋友们, 明年见!

原文链接 (C# 8 is old news. Onward, to C# 9!)

原文地址:https://www.cnblogs.com/xixixiao/p/csharp-8-is-old-news-onward-to-csharp-9.html

时间: 2024-08-06 00:40:59

[译文] C# 已成旧闻, 向前, 抵达 C# 9!的相关文章

物联网已成趋势 须多方一起参与

物联网已成趋势 在消费电子领域,最近一两年物联网也被炒得沸沸扬扬,大家都想参与这场游戏,让一切设备互联,包括可穿戴设备.家用电器.衣服鞋帽等等,所有一切都争先恐后想连到"云端".总体来看,对消费电子而言这是好趋势. 全国众多城市启动物联网大规模产业化工作,地方政府积极发展物联网产业,其物联网名城--无锡,是中国唯一的国家传感网创新示范区,2013年物联网规模已超过1400亿元,引进的物联网高层次人才已超过2000人,投入运营的物联网企业达794家,从业人员突破12万人.根据国家973物

付费只是开始,会员已成在线视频最大生产力

近日,艾瑞咨询发布了<中国在线视频付费市场解析>研究报告,这份报告透露出了三个非常重要的信息:1.2016年国内视频付费用户数量在保持高速增长,会员用户数量可能达到5441.8万人,渗透率超过10%:2.2016年中国在线视频用户付费市场规模为96.2亿元,同比增长为90.8%:3.在2016年的在线视频收入当中,广告收入占比为53.4%,用户付费收入占比为15.5%,在线视频市场规模中用户付费收入占比正在不断攀升. 视频用户付费习惯大器渐成 这几大信息无疑对整个行业透露出了重要的信号:影视会

”互联网+“时代,服务众包新模式已成大势所趋

随着全球分享经济的快速增长,基于互联网等方式的创新创业服务也蓬勃发展."众包"这种既可以高效快速解决问题,又能大大降低企业成本的外包模式,也在短短几年之间备受关注. 在互联网技术发展迅猛的当下,高昂的技术.人才.设备等成本在一定程度上限制了一批企业的生产和扩大,这也促使企业重新寻找突破点.2015年9月,国务院印发的<关于加快构建大众创业万众创新支撑平台的指导意见>中提出,积极发展众包,即汇众力增就业,借助互联网等手段,将传统由特定企业和机构完成的任务向自愿参与的所有企业和

手游App山寨破解的三宗罪:背后已成产业链

2013年手游行业发展势头开始越显强劲,手游开发者的规模与收入均实现了大幅增长.但是,在手游高速发展的同时,由于手游行业的快速的发展,一些问题,例如手游App破解.盗版也日益凸显.手机游戏软件被破解后注入恶意代码.盗取用户财产.窃取用户设备信息的现象屡见不鲜.如今,种类繁多的手游App市场,繁华背后暗藏多重隐患,致使手游App背上了"吸金炸弹"的罪名. <2048>引发的"连锁反应" <2048>是一款现象级的游戏,其在全球的风靡程度甚至超越

HuaweiPay接入易道博识OCR 银行卡识别已成移动支付标配

2016年以来,越来越多的"Pay"争先布局移动支付市场. 前几日,华为公司和中国银联联合宣布,双方就移动支付业务合作达成共识,共同推广华为移动支付Huawei Pay,这是今年继Apple Pay和Samsung Pay的又一"Pay",这也使得今年火热的"群Pay"市场再度升温. 如今各家厂商都在蠢蠢欲动,开始酝酿自己的移动支付平台,试图在这越发繁荣的市场上分一杯羹. 为了更好的占领新用户市场,不在这次移动支付大战中被淘汰,提高用户的支付体验

罗永浩信用已成负资产 未来锤子该如何突围?

锤子手机没出来的时候,收预付款造势;锤子手机出来的时候,没产能退款道歉;与王自如在优酷播放间舌战时,声势浩大不可一发!举办演讲活动时,收了预付款因延期变退款.这就是关于罗永浩的故事.当然,这就是一个无厘头串烧.我宁愿把他当成一个游走在个人与市场的半面商人. 当年老罗手持铁锤狂砸3台德国西门子冰箱,震惊德国媒体.国人纷纷为老罗此举拍手叫好.崇拜的种子埋在了我等少年之心.富于传奇的生活经历让老罗本身也积攒了一些名气.比如高二辍学,摆过地摊.卖过羊肉串.倒卖过药材.做过期货.销售过电脑配件,因为在新东

CCERT月报:Struts2漏洞已成高校网络安全顽疾(转)

Struts2漏洞已成高校网络安全顽疾 建议学校加大信息系统巡查力度 9月教育网运行正常,未发现影响严重的安全事件.近期安全形势较为严峻,学校要加大安全巡查的力度,对学校的信息系统进行排查,对于那些有严重安全隐患的信息系统必须及时采取技术措施进行防范,如果信息系统仅是对校内提供服务,建议采取校内限制访问的措施,来降低被攻击的风险. 近期新增严重漏洞评述: 1.微软9月的例行安全公告中修复了其多款产品存在的81个安全漏洞(严重等级的21个),涉及的产品包括,IE浏览器.Edge浏览器.Window

给你这么多学习资源,为什么你会“收藏不看,已成习惯?”

想学编程 得到一名业内程序员的点拨,他给出了几条很好的建议: 多打代码.多读代码 基础要学扎实.项目实战不能少 这些建议对吗?当然没错,可是当你信誓旦旦的操起家伙,准备大干一场的时候,却发现很难坚持做到这几点,最后不得不放弃,按照自己的方式来. 为什么你做不到?是你不够努力吗? 累死的行军蚁 行军蚁是一种非常特别的蚂蚁,他们不会筑巢,一出生就在不断的移动.发现猎物.吃掉猎物. 行军蚁有一套简单的行动规则,每一只蚂蚁会分泌“踪迹费洛蒙”,好让其他的蚂蚁跟随军团的前进路径. 然而,当领头的行军蚁不小

自动驾驶时代数字化的汽车已成最大移动电脑?

在你的印象中,疯狂提升自身计算能力的设备有哪些?是不断勇攀高峰的大型计算机,还是始终向前更新迭代的PC,抑或是性能与桌面级CPU有得一拼的手机处理器?偷偷告诉你,一直以来汽车都在运行着大量的计算能力.虽然大多数人并没有意识到这一点,但如今这个过程已变得越来越明显. 而从发展趋势看,汽车在变身为"最大移动电脑"的同时,也为自身打下了不断进化的基础.随着电动汽车时代.自动驾驶时代的带来,汽车或将发挥超出出行范畴之外的能力,让我们的生活变得更加美好. 从90年×××始,汽车就已逐步数字化 自