【学习笔记】表达式主体定义的成员(常规语法:member => expression;)

  • A+
所属分类:.NET技术
摘要

在阅读 .NET Core 源码的时候,表达式主体定义的成员随处可见,通过表达式主体定义,可采用非常简洁的可读形式提供成员的实现。 只要任何支持的成员(如方法或属性)的逻辑只包含单个表达式,就可以使用表达式主体定义。 

在阅读 .NET Core 源码的时候,表达式主体定义的成员随处可见,通过表达式主体定义,可采用非常简洁的可读形式提供成员的实现。 只要任何支持的成员(如方法或属性)的逻辑只包含单个表达式,就可以使用表达式主体定义。 

表达式主体定义具有下列常规语法

member => expression;

其中“expression”是有效的表达式。

C# 6 中引入了针对方法和只读属性的表达式主体定义支持,并在 C# 7.0 中进行了扩展。 表达式主体定义可用于下表列出的类型成员:

【学习笔记】表达式主体定义的成员(常规语法:member => expression;)

示例如下:

1、方法

expression-bodied 方法包含单个表达式,它返回的值的类型与方法的返回类型匹配;或者,对于返回 void 的方法,其表达式则执行某些操作。

using System;  public class Person {    public Person(string firstName, string lastName)    {       fname = firstName;       lname = lastName;    }     private string fname;    private string lname;     public override string ToString() => $"{fname} {lname}".Trim();    public void DisplayName() => Console.WriteLine(ToString()); }  class Example {    static void Main()    {       Person p = new Person("Mandy", "Dejesus");       Console.WriteLine(p);       p.DisplayName();    } }

2、只读属性

语法:

PropertyType PropertyName => expression;

示例:

public class Location {    private string locationName;     public Location(string name)    {       locationName = name;    }     public string Name => locationName; }

3、属性

从 C# 7.0 开始,可以使用表达式主体定义来实现属性 get 和 set 访问器。 下面的示例演示其实现方法:

public class Location {    private string locationName;     public Location(string name) => Name = name;     public string Name    {       get => locationName;       set => locationName = value;    } }

4、构造函数

public class Location {    private string locationName;     public Location(string name) => Name = name;     public string Name    {       get => locationName;       set => locationName = value;    } }

5、索引器

索引器的 get 和 set 访问器都以表达式主体定义的形式实现,如下所示:

using System; using System.Collections.Generic;  public class Sports {    private string[] types = { "Baseball", "Basketball", "Football",                               "Hockey", "Soccer", "Tennis",                               "Volleyball" };     public string this[int i]    {       get => types[i];       set => types[i] = value;    } }

6、终结器

using System;  public class Destroyer {    public override string ToString() => GetType().Name;     ~Destroyer() => Console.WriteLine($"The {ToString()} finalizer is executing."); }

 

本文内容摘自微软官方文档:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/statements-expressions-operators/expression-bodied-members#indexers