使用“表达式体函数和属性”的好处是什么?

本文关键字:是什么 属性 表达式 函数 使用 | 更新日期: 2023-09-27 18:15:39

我确实看到许多人使用新特性,但是使用这些表达式的好处是什么呢?

例子:

public override string ToString() => string.Format("{0}, {1}", First, Second);
public string Text =>
string.Format("{0}: {1} - {2} ({3})", TimeStamp, Process, Config, User);

这个问题与这个问题不同,因为我不仅要问性能和效率是否会改变,还要问编译代码(IL代码)的差异,以及它是否是最佳实践,应该在现实世界中使用。

这个问题也是而不是离题,因为我要求的是真实的企业经验,而不是建议。因此,不要推荐,但要解释为什么你会或为什么你不会使用该功能,以及你使用它的经验!

使用“表达式体函数和属性”的好处是什么?

它提供了更好的可读性并节省了代码中的一些空间。

回答我的一个问题。我已经测试过了,IL代码是否与以下结果相同:

static void Main(string[] args)
{
    Console.WriteLine(MyClass.GetTexted);
}
class MyClass
{
    private static string dontTouchMe = "test";
    public static string GetTexted { get { return dontTouchMe + "1"; } }
    //public static string GetTexted => dontTouchMe + "1";
}

…将生成相同的 IL代码:

00993376  call        [random value]
0099337B  mov         dword ptr [ebp-40h],eax  
0099337E  mov         ecx,dword ptr [ebp-40h]  
00993381  call        71886640  
00993386  nop  
        }
00993387  nop  
00993388  lea         esp,[ebp-0Ch]  
0099338B  pop         ebx  
0099338C  pop         esi  
0099338D  pop         edi  
0099338E  pop         ebp  
0099338F  ret  

[random value]部分是唯一改变的代码,这是有意义的,因为它每次被编译时都会改变。


我还是一名在校学生,所以我只能从我的角度(不是企业的角度)回答其他问题:

  • "表达式体函数和属性"似乎是一个很好的实践,因为它的代码更紧凑,可读性更强。(感谢@Wazner和@MacakM)

  • 使用它们也是有意义的,因为它们看起来更模块化,更像OOP代码

体表达式只提供一种简洁的方式来声明只读属性。
从性能的角度来看,可以这样写:

public bool MyProperty {
    get {
        return myMethod();
    }
}
private bool myMethod() {return true;}

或:

public bool MyProperty => myMethod();
private bool myMethod() {return true;}

没有区别,因为它以同样的方式被翻译成IL
但是要注意:body表达式是Visual Studio 2015和更新版本默认可用的功能,但如果你想在旧版本的VS中使用,你需要从NuGet安装c# 6.0。