- A+
所属分类:.NET技术
在阅读 .NET Core 源码的时候,表达式主体定义的成员随处可见,通过表达式主体定义,可采用非常简洁的可读形式提供成员的实现。 只要任何支持的成员(如方法或属性)的逻辑只包含单个表达式,就可以使用表达式主体定义。
表达式主体定义具有下列常规语法:
member => expression;
其中“expression”是有效的表达式。
C# 6 中引入了针对方法和只读属性的表达式主体定义支持,并在 C# 7.0 中进行了扩展。 表达式主体定义可用于下表列出的类型成员:
示例如下:
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