C# 6.0 (C# vNext) 新功能之:Expression Bodied Functions and Properties

Expression Bodied Function 可以用在:

  • methods
  • user-defined operators
  • type conversions
  • read-only properties
  • indexers

看以下的例子:

public class RgbColor(int r, int g, int b)
{
  public int Red { get; } = r;
  public int Green { get; } = g;
  public int Blue { get; } = b;

  public string ToHex() =>
    string.Format("#{0:X2}{1:X2}{2:X2}", Red, Green, Blue);

  public static RgbColor operator - (RgbColor color) =>
    new RgbColor(
      color.Red ^ 0xFF,
      color.Green ^ 0xFF,
      color.Blue ^ 0xFF
    );
}

用於「方法」的例子:

public string ToHex() => string.Format("#{0:X2}{1:X2}{2:X2}", Red, Green, Blue);
public override string ToString() => this.Name;

用於「user-defined operators」的例子:

  public static RgbColor operator - (RgbColor color) =>
    new RgbColor(
      color.Red ^ 0xFF,
      color.Green ^ 0xFF,
      color.Blue ^ 0xFF
    );
public static Complex operator +(Complex a, Complex b) => a.Add(b);

用於「read-only property」的例子:

特别注意,这是 Read Only Property 而不是 Field

public string ID => Guid.NewGuid().ToString();

又一个例子:

public class Point(int x, int y) {
    public int X => x;
    public int Y => y;
    public double Dist => Math.Sqrt(x * x + y * y);
    public Point Move(int dx, int dy) => new Point(x + dx, y + dy);
}

用於「type conversions」的例子:实现 string 和 Name 之间的隐性转换

public static implicit operator string(Name n) => n.First + " " + n.Last;

用於「indexers」的例子:

public Customer this[Id id] => store.LookupCustomer(id);

时间: 2024-10-09 13:50:24

C# 6.0 (C# vNext) 新功能之:Expression Bodied Functions and Properties的相关文章

C# 6.0 (C# vNext) 新功能之:Exception-Handling Improvements

在 C# 6.0 新功能裹的异常处理,有两个改进: 异步处理(async and await)可以在 catch block 裹使用了.在 C# 5.0 推出的 async and await,当时不可以用於 catch block,现在已经可以了. 支持异常过滤 exception filtering 异步处理的例子: try { WebRequest webRequest = WebRequest.Create("http://www.csdn.net"); WebResponse

C# 6.0 (C# vNext) 新功能之:Semicolon operator

虽然这个功能在正式版本中可能不会有,但了解一下也无妨. Semicolon operator:分号运算符 为何叫 operator? 一般我们看到的,像加法.减法等运算符,但这个也叫操作法是为什麽? 我们先看一下例子: var result = (var x = Foo(); Write(x); x * x); 意思是: 宣告变量 result 宣告变量 x 呼叫 Foo 方法 将 Foo 方法的回传值,指定给 x 呼叫 Write 方法,并传入 x 的值 执行 x * x 将 x * x 的值

C# 6.0 (C# vNext) 新功能之:Numeric Literal Formats

Numeric Literal Formats = Binary literals and separators 个人解释为 「2 位元(2 进位)实字以及分隔符」 以前可以用的,主要就十进位以及十位进位如下: var num1 = 1234; // 10 进位 var num2 = 0x1234; // 16 进位 2 进位实字怎麽宣告? var num3 = 0b1010; // 2 进位,代表的 10 进位数字是 10 而当我们使用 2 进位宣告实字时,那数字一下子就会非常的长,比如: v

AndroidStudio3.0 下载使用新功能介绍

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> AndroidStudio3.0 下载使用新功能介绍 - 天平 - 博客频道 - CSDN.NET 天平 向着目标一步一步走. 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯]流畅的Python,终于等到你!    &

C# 8.0中的新功能

微信公众号:Fintech极客 作者为软件开发工程师,就职于金融信息科技类公司,通过CFA一级,分享计算机和金融相结合领域的技术和知识. C# 8.0中的新功能 C# 8.0已经推出来好长一段时间了, 由于公司目前主要使用的还是6.0版本,加上之前个人事情较多,一直没有总结,今天主要查看和测试微软官方文档中的内容:https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8 只读成员(Readonly members) 在st

Kafka 0.11版本新功能介绍 —— 空消费组延时rebalance

在0.11之前的版本中,多个consumer实例加入到一个空消费组将导致多次的rebalance,这是由于每个consumer instance启动的时间不可控,很有可能超出coordinator确定的rebalance timeout(即max.poll.interval.ms),而每次rebalance的代价又相当地大,因为很多状态都需要在rebalance前被持久化,而在rebalance后被重新初始化.曾经有个国外用户,他有100个consumer,每次rebalance的时间甚至要1个

vSphere 6.0 U1发布新功能说明

如您所知,VMworld2015上对于vSphere并没有什么太多提及,但是,Virtual SAN却是一个重要话题.而Virutual SAN内置于vSphere里面.所以,更新Virtual SAN 6.1的方式就是升级vSphere平台.所以,vSphere 6.0 U1快速发布了,这个版本的vSphere其实除了Virtual SAN 6.1外,没有什么太多新东西增加,具体清单如下:8 V0 ~) @& z Q3 x$ M/ n' H2 E) u7 o D% I4 {$ q3 \; L-

Android Studio 3.0 下载 使用新功能介绍

谷歌2017发布会更新了挺多内容的,而且也发布了AndroidStudio3.0预览版,一些功能先睹为快.(英语一般,有些翻译不太好) 下载地址 https://developer.android.google.cn/studio/archive.html 选择显示全部即可看到下载地址,这里给出来了. Windows (64-bit): android-studio-ide-171.4010489-windows.zip (702075896 bytes) https://dl.google.c

Apache Flink 1.3.0正式发布及其新功能介绍

下面文档是今天早上翻译的,因为要上班,时间比较仓促,有些部分没有翻译,请见谅. 2017年06月01日儿童节 Apache Flink 社区正式发布了 1.3.0 版本.此版本经历了四个月的开发,共解决了680个issues.Apache Flink 1.3.0 是 1.x.y 版本线上的第四个主要版本,其 API 和其他 1.x.y 使用 @Public 注释的API是兼容的. 此外,Apache Flink 社区目前制定了每四月发行一个主要版本(Apache Flink 1.2.0 是201