首页 > 解决方案 > 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 的实现,那么第二个是什么意思呢?有什么不同?一个优先于另一个?

标签: c#c#-6.0

解决方案


那些是相同的。它们编译成相同的代码:

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相同的格式。


推荐阅读