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

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

作者:
出处:
你可能感兴趣的文章
dos下设置mysql密码_dos命令下修改mysql密码的方法
查看>>
交换机如何设置我能访问它但他不能访问我_“交换机”有什么作用?怎样使用?...
查看>>
数据结构基本操作_R中的数据结构简介及类别变量的基本操作
查看>>
微分方程解法总结_视频教学:线性微分方程解的结构、问题类型及求解思路与方法...
查看>>
blt功能_bitblt()用法
查看>>
MySQL中level的用法_leveldb使用 (转载)
查看>>
卷积神经网络由谁提出_科研人员提出一种基于卷积循环神经网络的单通道渐进语音增强方法...
查看>>
python 曲线拟合求参数_Python:查找任意曲线的拟合参数数量
查看>>
python批量生成图片_python日常实用技能:如何利用Python批量生成任意尺寸的图片...
查看>>
python爱好者社区公众号历史文章合集_GitHub - thinkingpy/weixin_crawler: 高效微信公众号历史文章和阅读数据爬虫powered by scrapy...
查看>>
ranger安装hbase插件_ranger的配置与使用
查看>>
mysql模板文件_MySQL 配置文件模板
查看>>
mysql连接数据库测试连接成功_java连接mysql数据库及测试是否连接成功的方法
查看>>
1×pbs缓冲液配方_PBS缓冲液配方.doc
查看>>
mysql qadir_MySQL 及 SQL 注入
查看>>
python 播放视频 ftp_视频在通过Python ftplib上传时出现损坏
查看>>
python3 image_python docker快速入门3制作image
查看>>
python代码写名字_【python】【名字】是什么?,Pythonname
查看>>
python调用浏览器生成dom_1分钟快速生成用于网页内容提取的xslt
查看>>
tolua unity 报错_关于LUA+Unity开发_toLua篇【二】
查看>>