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

本文共 1915 字,大约阅读时间需要 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. 参考

转载地址:http://bsxal.baihongyu.com/

你可能感兴趣的文章
京信通信:数据智能为生产调试“增效瘦身”
查看>>
「实用教程」登录失败超过一定次数如何锁定帐号?
查看>>
java创建线程的三种方式
查看>>
ElasticSearch DSL Script使用案例分享
查看>>
你真的懂JavaScript计时器吗?
查看>>
CI框架如何在主目录application目录之外使用uploadify上传插件和bootstrap前端框架:...
查看>>
游乌镇
查看>>
使用Akka持久化——持久化与快照
查看>>
springboot之RMI的使用
查看>>
【NLP】揭秘马尔可夫模型神秘面纱系列文章(三)
查看>>
openstack 云服务上创建的虚拟机,主机名修改
查看>>
css3 贝塞尔曲线cubic-bezier(x1, y1, x2, y2)
查看>>
远程连接docker daemon,Docker Remote API
查看>>
C语言dll文件的说明以及生成、使用方法
查看>>
【Web API系列教程】1.3 — 实战:用ASP.NET Web API和Angular.js创建单页面应用程序(上)...
查看>>
java基础学习_面向对象(上)03_day08总结
查看>>
NG-ZORRO 7.3.1 发布,Ant Design 的 Angular 实现
查看>>
20180417PLSQL中sql语句格式化与注解问题
查看>>
Java 基础 之 while 循环
查看>>
顺丰今天上市了,王卫又成了民营快递业的首富
查看>>