表达式主体定义

原文地址https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/statements-expressions-operators/expression-bodied-members

通过表达式主体定义,可采用非常简洁的可读形式提供成员的实现。 只要任何支持的成员(如方法或属性)的逻辑包含单个表达式,就可以使用表达式主体定义。 表达式主体定义具有下列常规语法:

C#

member => expression;

其中“expression”是有效的表达式。

C# 6 中引入了针对方法和属性 Get 访问器的表达式主体定义支持,并在 C# 7.0 中进行了扩展。 表达式主体定义可用于下表列出的类型成员:

成员开始提供支持的版本
方法C# 6
构造函数C# 7.0
终结器C# 7.0
属性 GetC# 6
属性 SetC# 7.0
索引器C# 7.0

方法

expression-bodied 方法包含单个表达式,它返回的值的类型与方法的返回类型匹配;或者,对于返回 void 的方法,其表达式则执行某些操作。 例如,替代 ToString 方法的类型通常包含单个表达式,该表达式返回当前对象的字符串表示形式。

下面的示例定义 Person 类,该类通过表达式主体定义替代 ToString。 它还定义向控制台显示名称的 DisplayName 方法。 请注意,ToString 表达式主体定义中未使用 return 关键字。

C#

 
  1. using System;

  2.  
  3. public class Person

  4. {

  5. public Person(string firstName, string lastName)

  6. {

  7. fname = firstName;

  8. lname = lastName;

  9. }

  10.  
  11. private string fname;

  12. private string lname;

  13.  
  14. public override string ToString() => $"{fname} {lname}".Trim();

  15. public void DisplayName() => Console.WriteLine(ToString());

  16. }

  17.  
  18. class Example

  19. {

  20. static void Main()

  21. {

  22. Person p = new Person("Mandy", "Dejesus");

  23. Console.WriteLine(p);

  24. p.DisplayName();

  25. }

  26. }

  27.  

有关详细信息,请参阅方法(C# 编程指南)。

构造函数

构造函数的表达式主体定义通常包含单个赋值表达式或一个方法调用,该方法调用可处理构造函数的参数,也可初始化实例状态。

以下示例定义 Location 类,其构造函数具有一个名为“name”的字符串参数。 表达式主体定义向 Name 属性分配参数。

C#

 
  1. public class Location

  2. {

  3. private string locationName;

  4.  
  5. public Location(string name) => Name = name;

  6.  
  7. public string Name

  8. {

  9. get => locationName;

  10. set => locationName = value;

  11. }

  12. }

有关详细信息,请参阅构造函数(C# 编程指南)。

终结器

终结器的表达式主体定义通常包含清理语句,例如释放非托管资源的语句。

下面的示例定义了一个终结器,该终结器使用表达式主体定义来指示已调用该终结器。

C#

 
  1. using System;

  2.  
  3. public class Destroyer

  4. {

  5. public override string ToString() => GetType().Name;

  6.  
  7. ~Destroyer() => Console.WriteLine($"The {ToString()} destructor is executing.");

  8. }

有关详细信息,请参阅终结器(C# 编程指南)。

属性 Get 语句

如果选择自行实现属性 Get 访问器,可以对只返回属性值的单个表达式使用表达式主体定义。 请注意,未使用 return 语句。

下面的示例定义 Location.Name 属性,其属性 Get 访问器返回支持该属性的私有 locationName 字段的值。

C#

 
  1. public class Location

  2. {

  3. private string locationName;

  4.  
  5. public Location(string name) => Name = name;

  6.  
  7. public string Name

  8. {

  9. get => locationName;

  10. set => locationName = value;

  11. }

  12. }

不使用显式 set 语句也可实现使用表达式主体定义的只读属性。 语法为:

C#复制

PropertyName => returnValue;

下面的示例定义 Location 类,其只读 Name 属性以表达式主体定义的形式实现,该表达式主体定义返回私有 locationName 字段值。

C#

 
  1. public class Location

  2. {

  3. private string locationName;

  4.  
  5. public Location(string name) => locationName = name;

  6.  
  7. public string Name => locationName;

  8. }

有关详细信息,请参阅属性(C# 编程指南)。

属性 Set 语句

如果选择自行实现属性 Set 访问器,可以对单行表达式使用表达式主体定义,该单行表达式用于对支持该属性的字段赋值。

下面的示例定义 Location.Name 属性,其属性 Set 语句将其输入参数赋给支持该属性的私有 locationName 字段。

C#

 
  1. public class Location

  2. {

  3. private string locationName;

  4.  
  5. public Location(string name) => Name = name;

  6.  
  7. public string Name

  8. {

  9. get => locationName;

  10. set => locationName = value;

  11. }

  12. }

有关详细信息,请参阅属性(C# 编程指南)。

索引器

与属性一样,如果索引器的 Get 访问器包含单个返回值的语句或其 Set 访问器执行简单的赋值,则 Get 和 Set 访问器包含表达式主体定义。

下面的示例定义名为 Sports 的类,其中包含一个内部 String 数组,该数组包含大量体育运动的名称。索引器的 Get 和 Set 访问器都以表达式主体定义的形式实现。

C#

 
  1. using System;

  2. using System.Collections.Generic;

  3.  
  4. public class Sports

  5. {

  6. private string[] types = { "Baseball", "Basketball", "Football",

  7. "Hockey", "Soccer", "Tennis",

  8. "Volleyball" };

  9.  
  10. public string this[int i]

  11. {

  12. get => types[i];

  13. set => types[i] = value;

  14. }

  15.  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】 - 数据预处理之数据归一化(标准化)与实战分析,正则化

一、为什么要进行数据归一化 定义:把所有数据的特征都归到 [0,1] 之间 或 均值0方差1 的过程。原则:样本的所有特征,在特征空间中,对样本的距离产生的影响是同级的;问题:特征数字化后,由于取值…

Java中Lambda表达式与方法引用和构造器引用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/cjhc666/article/details/54948909 方法引用: 首先看 Timer t new Timer(1000, System.…

【基于Python】 - 人工智能机器学习深度学习数据分析 - 常见问题,常用的套路与操作(持续更新)

20200221; 1.做分类问题的时候,给定你标签,你想知道每一类标签的出现频数,可以使用这个函数:np.bincount()。 如果想分析一下数据样本是否均衡的时候,可以考虑这种操作,代码十分简明。 2. 当…

Entity Framework 简介

转贴:链接https://www.cnblogs.com/davidzhou/p/5348637.html 侵删,谢谢 第一篇:Entity Framework 简介 先从ORM说起吧,很多年前,由于.NET的开源组件不像现在这样发达,更别说一个开源的ORM框架&#xff0…

关于C#中的“?”

1. 可空类型修饰符(T?) 强类型语言中引用类型可以为空,如: string strnull;而你若是定义一个值类型为空,则是会报错的。 然而,在处理数据库和其他包含可能未赋值的元素的数据类型时,我们希望…

【Python学习】 - pyecharts包 - 地图可视化

安装: https://pan.baidu.com/s/1vAlSjVbHt0EDJY6C_38oEA 提取码:t9be 在这个链接中下载对应的.whl文件,放到下图所示的目录中。 然后打开anaconda prompt 找到对应的目录,输入: pip install pyecharts-0.1.9.4-py…

【Python学习】 - anaconda中spyder的常用快捷键总结

熟练spyder中的一些快捷键后,能极大提升code效率。 这里列出常用的快捷键。(可以在spyder导航栏Tools-Preferences-Keyboard shortcut中查看有所有的快捷键) Tab/ShiftTab:代码缩进/撤销代码缩进 Ctrl1:注释/撤销注释 Ctrl4/5:块注释/撤销块…

【机器学习】 - 关于图像质量评价IQA(Image Quality Assessment)

图像质量评价(Image Quality Assessment,IQA)是图像处理中的基本技术之一,主要通过对图像进行特性分析研究,然后评估出图像优劣(图像失真程度)。 主要的目的是使用合适的评价指标,使得评价结果…

【机器学习】 - CNN

什么是卷积神经网络,它为何重要? 卷积神经网络(也称作 ConvNets 或 CNN)是神经网络的一种,它在图像识别和分类等领域已被证明非常有效。 卷积神经网络除了为机器人和自动驾驶汽车的视觉助力之外,还可以成功…

wcf wpf mfc 区别

wcf:windows communication foundation 是微软将众多通信技术集成到一起的一个分布式通信开发框架。比如.net remoting、web service、msmq等。wpf:windows platform foundation 是新型的开发windows桌面应用的框架,mfc-winform-wpf ,是这样的一个升级路…

sharepoint服务器安装已安装netframework4.5,仍提示未安装

安装sharepoint2013服务器,明明安装已安装.net framework4.5,却提示未安装,要求安装 下载附件,解压缩,替换掉sharepoint2013里面的dll文件,成功。 另外,安装SharePoint Server,本机…

【机器学习】 - 关于合适用均方误差(MSE)何时用交叉熵(cross-entropy)

分类问题用交叉熵,回归问题用均方误差。 至于原因,可以看看它们的函数式,主要是两种损失函数对分类和回归结果误差的衡量的方式不同。比如,交叉熵,在分类时(热编码),如果分类正确&a…

Asp.Net中WebForm与MVC,Web API模式对比

webform,web mvc和web api都是asp.net官方的三套框架,想对比下三者的关系,查了下资料,web api跟web mvc基本同属一脉,只是mvc多了一个视图渲染,网上有些博客介绍了webform和mvc底层源码实现的不同&#xff…

【Python学习】 - 使用PIL, cv2, keras.preprocessing, scipy.imageio, matplotlib.image, skimage读取和保存图像的方法

python中图像处理相关库有很多,这里简单介绍PIL、cv2、scipy.imageio 、matplotlib.image、skimage等常用库,其中PIL库使用最方便,cv2库功能最强大。 PIL:Python Imaging Library python安装:pip install Pillow 这里…

sharepoint 到底是什么

1、SharePoint能做什么,以前我们的开发流程不外乎几个步骤:需求分析->建表->开发->测试->实施,那么请问SharePoint能开发基于数据表增删改操作的项目吗? 能做什么这个问题比较宽泛,不太容易回答。 SharePo…

【机器学习】 - Keras学习 - TensorBoard模块 - 可视化模型训练过程神器

运行环境:Win10 anaconda3。 TensorFlow版本:2.0.0 import numpy as np import tensorflow as tf import tensorflow.keras from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense import matplotlib.pyplot as…

无废话SharePoint入门教程一[SharePoint概述]

一、前言 听说SharePoint也有一段时间了,可一直处在门外。最近被调到SharePoint实施项目小组,就随着工作一起学习了一下实施与开发。但苦于网上SharePoint入门的东西实在太少,导致自学入门很难,不知道SharePoint这东西到底能做什么…

【机器学习】 - TensorFlow.Keras 建立模型 model.evaluate 和 model.predict 的区别

一、概述 model.evaluate 函数原型: evaluate(xNone, yNone, batch_sizeNone, verbose1, sample_weightNone, stepsNone) 输入数据和标签,输出损失值和选定的指标值(如精确度accuracy) # 评估模型,不输出预测结果loss,accuracy…

【Python学习】 - 几乎所有常用包汇总

库名称简介 Chardet 字符编码探测器,可以自动检测文本、网页、xml的编码。 colorama 主要用来给文本添加各种颜色,并且非常简单易用。 Prettytable 主要用于在终端或浏览器端构建格式化的输出。 difflib,[Python]标准库,计算文…

SharePoint 站点结构及概念

简单的记录一下Sharepoint的结构与基本概念 一、服务器场 服务器场,即主机的集群.简单点说就是两台机器互相备份,两个或几台机器之间有心跳线,定时检测对端设备的情况,如果对端设备出现故障,一台机器就会接管出问题机器的受保护…