[C#6] 6-表达式形式的成员函数
时间:2022-04-23
本文章向大家介绍[C#6] 6-表达式形式的成员函数,主要内容包括0. 目录、1. 老版本的代码、2. 表达式形式的成员函数、3. Example、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
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 }
这种新语法也仅仅只是语法简化,并无实质改变,编译结果和以前的老版本写法完全一致。
- Elasticsearch索引增量统计及定时邮件实现
- 机器学习中的特征空间
- 简单易学的机器学习算法——马尔可夫链蒙特卡罗方法MCMC
- 推荐算法——基于图的推荐算法PersonalRank算法
- 推荐算法——非负矩阵分解(NMF)
- 【Go 语言社区】转-golang windows 判断锁屏
- 【Go 语言社区】单点redis 持久化在高并发下存在延迟情况
- 设计模式(2)-策略模式之多用组合少用继承
- Golang获取随机端口和本机ip地址
- 设计模式(3)-装扮你的类(装饰模式)
- [Go 语言社区]服务器读取配置文件只-json数据
- gsoap开发webservice
- [Go 语言社区]测试模块之---utf8例子
- org.hibernate.type.StringType cannot be cast to org.hibernate.type.VersionType
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 小书MybatisPlus第6篇-主键生成策略精讲
- Spring Security OAuth2之resource_id配置与验证
- 了解红黑树的起源,理解红黑树的本质
- 在java中进行日期时间比较的4种方法
- 【crossbeam系列】4 crossbeam-channel:加强版channel
- 不想得手指关节炎?帮你提炼IDEA常用代码补全操作
- SpringBoot实现本地存储文件上传及提供HTTP访问服务
- 从 0 到 1 搭建技术中台之 iOS 可视化埋点实践
- 超给力,一键生成数据库文档-数据库表结构逆向工程
- 精讲RestTemplate第6篇-文件上传下载与大文件流式下载
- 【Rust日报】2020-09-12 Apple 使用 Rust 进行底层编程
- 精讲RestTemplate第4篇-POST请求方法使用详解
- 精讲RestTemplate第3篇-GET请求使用方法详解
- 通过JSch运行远程linux主机上的shell脚本
- 精讲RestTemplate第5篇-DELETE、PUT等请求方法使用详解