[C#6] 6-表达式形式的成员函数

简介: 0. 目录 C#6 新增特性目录 1. 老版本的代码 1 internal class Person 2 { 3 public string FirstName { get; set; } 4 public string LastName { get; set...

0. 目录

C#6 新增特性目录

1. 老版本的代码

 1 internal class Person
 2 {
 3     public string FirstName { get; set; }
 4     public string LastName { get; set; }
 5 
 6     public string FullName
 7     {
 8         get { return FirstName + LastName; }
 9     }
10 
11     public override string ToString()
12     {
13         return string.Format("[firstname={0},lastname={1}]", FirstName, LastName);
14     }
15 }

通常情况下,有些简单的只读属性和方法只有一行代码,但是我们也不得不按照繁琐的语法去实现它。C#6带了了一种和lambda语法高度一致的精简语法来帮助我们简化这些语法。先看看老版本的IL代码(这里我就不展开IL了,看下结构即可,都是普通的属性和方法而已):

2. 表达式形式的成员函数

我们看看新的写法有哪些简化:

1 internal class Person
2 {
3     public string FirstName { get; set; }
4     public string LastName { get; set; }
5 
6     public string FullName => FirstName + LastName;
7 
8     public override string ToString() => string.Format("[firstname={0},lastname={1}]", FirstName, LastName);
9 }

对于属性来说,省略掉了get声明,方法则省掉了方法的{},均使用=>语法形式来表示。看看IL吧:

好吧,什么也不解释了,都一样还说啥,,,

3. Example

 1 internal class Point
 2 {
 3     public int X { get; private set; }
 4     public int Y { get; private set; }
 5 
 6     public Point(int x, int y)
 7     {
 8         this.X = x;
 9         this.Y = y;
10     }
11 
12     public Point Add(Point other)
13     {
14         return new Point(this.X + other.X, this.Y + other.Y);
15     }
16 
17     //方法1,有返回值
18     public Point Move(int dx, int dy) => new Point(X + dx, Y + dy);
19 
20     //方法2,无返回值
21     public void Print() => Console.WriteLine(X + "," + Y);
22 
23     //静态方法,操作符重载
24     public static Point operator +(Point a, Point b) => a.Add(b);
25 
26     //只读属性,只能用于只读属性
27     public string Display => "[" + X + "," + Y + "]";
28 
29     //索引器
30     public int this[long id] => 1;
31 }
32 
33 internal class Program
34 {
35     private static void Main()
36     {
37         Point p1 = new Point(1, 1);
38         Point p2 = new Point(2, 3);
39         Point p3 = p1 + p2;
40         //输出:[3,4]
41         Console.WriteLine(p3.Display);
42     }
43 }

这种新语法也仅仅只是语法简化,并无实质改变,编译结果和以前的老版本写法完全一致。

4. 参考

Method Expression Body Definitions

Property Expression Body Definitions

作者: Blackheart
目录
相关文章
|
5天前
|
开发框架 .NET 编译器
C# 10.0中Lambda表达式的改进:更简洁、更灵活的代码编写体验
【1月更文挑战第21天】随着C#语言的不断发展,Lambda表达式作为一种简洁、高效的函数式编程工具,在C# 10.0中迎来了重要的改进。本文将详细探讨C# 10.0中Lambda表达式的新特性,包括参数类型的推断增强、自然类型的Lambda参数以及Lambda表达式的属性改进等。这些改进不仅简化了Lambda表达式的编写过程,还提升了代码的可读性和灵活性,为开发者带来了更优质的编程体验。
|
6月前
|
开发框架 .NET C#
ASP.Net c# 正则表达式 子表达式 group
ASP.Net c# 正则表达式 子表达式 group
36 0
|
5天前
|
SQL 开发框架 .NET
C#linq表达式的应用
C#linq表达式的应用
8 0
|
5天前
|
开发框架 .NET 编译器
C#学习相关系列之匿名方法和Lambda表达式
C#学习相关系列之匿名方法和Lambda表达式
|
8月前
|
Java 编译器 C#
C#中的Lambda表达式
C#中的Lambda表达式
45 0
|
5天前
|
开发框架 .NET 编译器
C# 9.0中的目标类型新表达式:类型推断的又一进步
【1月更文挑战第16天】C# 9.0引入了目标类型新表达式,这是类型推断功能的一个重要扩展。通过目标类型新表达式,开发者在创建对象时可以省略类型名称,编译器会根据上下文自动推断所需类型。这一特性不仅简化了代码编写,还提高了代码的可读性和维护性。本文将详细介绍目标类型新表达式的语法、使用场景及其对C#编程的影响。
|
5天前
|
机器学习/深度学习 开发框架 .NET
C# 中的 Lambda 表达式:一种简洁而强大的编程工具
【1月更文挑战第6天】在现代编程中,Lambda 表达式已经成为一种非常流行的编程范式。C# 作为一种功能强大的、面向对象的编程语言,自然也不例外。Lambda 表达式在 C# 中提供了一种简洁、灵活的方式来表示匿名函数。这些函数可以被用作委托或表达式树类型,从而在各种不同的上下文中使用。
|
5天前
|
SQL 开发框架 .NET
C#进阶-LINQ表达式之投影
本篇文章我们将演示LINQ扩展包语法里的投影特性,用投影实现LINQ结果集的类型转换。目前LINQ支持两种语法,我会在每个案例前先用大家熟知的SQL语句表达,再在后面用C#的两种LINQ语法分别实现。LINQ语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。
31 0
|
5天前
|
SQL 开发框架 .NET
C#进阶-LINQ表达式之多表查询Ⅱ
本篇文章我们将演示LINQ扩展包基础语法里的多表查询 ,以Join连接查询为主要内容。目前LINQ支持两种语法,我会在每个案例前先用大家熟知的SQL语句表达,再在后面用C#的两种LINQ语法分别实现。LINQ语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。
60 0
|
5天前
|
SQL 开发框架 .NET
C#进阶-LINQ表达式之多表查询Ⅰ
本篇文章我们将演示LINQ扩展包基础语法里的多表查询 ,包括交集、并集、差集、去重、合并等实际操作中常用的类型转换手法。目前LINQ支持两种语法,我会在每个案例前先用大家熟知的SQL语句表达,再在后面用C#的两种LINQ语法分别实现。LINQ语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。
39 0