博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[C#6] 6-表达式形式的成员函数
阅读量:5233 次
发布时间:2019-06-14

本文共 2003 字,大约阅读时间需要 6 分钟。

0. 目录

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 Person2 {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 Program34 {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. 参考

转载于:https://www.cnblogs.com/linianhui/p/csharp6_expression-bodied-function-members.html

你可能感兴趣的文章
洛谷P2777
查看>>
PHPStorm2017设置字体与设置浏览器访问
查看>>
SQL查询总结 - wanglei
查看>>
安装cocoa pods时出现Operation not permitted - /usr/bin/xcodeproj的问题
查看>>
GIT笔记:将项目发布到码云
查看>>
JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别
查看>>
JavaScript 鸭子模型
查看>>
SQL Server 如何查询表定义的列和索引信息
查看>>
GCD 之线程死锁
查看>>
NoSQL数据库常见分类
查看>>
一题多解 之 Bat
查看>>
Java 内部类
查看>>
{面试题7: 使用两个队列实现一个栈}
查看>>
【练习】使用事务和锁定语句
查看>>
centos7升级firefox的flash插件
查看>>
Apache Common-IO 使用
查看>>
评价意见整合
查看>>
二、create-react-app自定义配置
查看>>
Android PullToRefreshExpandableListView的点击事件
查看>>
系统的横向结构(AOP)
查看>>