c# - get-property 中使用的表达式体函数成员
问题描述
在编写类时,我可以通过两种方式在 Get-property 中使用 Expression 实体函数:
class Person
{
public string FirstName {get; set;}
public string LastName {get; set;}
public string FullName1 => $"{FirstName} {LastName}";
public string FullName2 { get => $"{FirstName} {LastName}"; }
}
MSDN 关于表达式体函数成员
您也可以在只读属性中使用表达式主体成员:
public string FullName => $"{FirstName} {LastName}";
那么如果这个语法代表一个 Get-property 的实现,那么第二个是什么意思呢?有什么不同?一个优先于另一个?
解决方案
那些是相同的。它们编译成相同的代码:
Person.get_FullName1:
IL_0000: ldstr "{0} {1}"
IL_0005: ldarg.0
IL_0006: call UserQuery+Person.get_FirstName
IL_000B: ldarg.0
IL_000C: call UserQuery+Person.get_LastName
IL_0011: call System.String.Format
IL_0016: ret
Person.get_FullName2:
IL_0000: ldstr "{0} {1}"
IL_0005: ldarg.0
IL_0006: call UserQuery+Person.get_FirstName
IL_000B: ldarg.0
IL_000C: call UserQuery+Person.get_LastName
IL_0011: call System.String.Format
IL_0016: ret
只是符号的不同形式,允许您也提供set
相同的格式。
推荐阅读
- azure - 克服 Azure 应用程序网关上的 40 个前端端口限制
- java - 可以将@Component 用于任何实用程序类吗?
- ios - 如何使用 Swift 中的自动生成键从情节提要中设置的 UITextView 中检索文本?
- android - 有没有办法在 Android 10+ 中强制 Wi-Fi 重新连接/断开连接?
- java - JavaFX 缩放不会调整父容器中的组件大小
- c - 使用 calloc() 分配内存后释放内存以创建字符串数组
- python - 安装本地 Python 包后 Juypter 笔记本中的 ModuleNotFoundError
- r - 添加数据点以平滑 GPS 坐标
- firebase - Firebase 托管错误 - 添加了一个新域并添加了 A 记录,但我已经等待了 24 小时
- spring-security - 记录 org.springframework