使用“Expression Bodied Functions and Properties”有什么好处

我确实看到很多人使用这个新function ,但使用这些表达式有什么好处?

示例 :

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

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

这个问题也不是主题 ,因为我要求的是现实生活中的企业经验,而不是建议。 因此,不建议,但解释为什么你会或为什么你不会使用该function以及你有什么经验!

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

正文表达式仅提供一种紧凑且更简洁的方式来声明只读属性。
从性能的角度来看,你写这个:

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

或这个:

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

没有区别,因为它以相同的方式被翻译成IL
但请注意这一点:body表达式是deafult在Visual Studio 2015和更新版本上可用的function,但是如果你想在旧的VS版本中使用,你需要从nuget安装C#6.0

回答我的一个问题。 我已经测试过,如果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]部分是唯一已更改的代码,它确实有意义,因为它每次编译时都会更改。


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

  • “表达身体的function和属性”看起来似乎是一种很好的做法,因为代码更加紧凑和易读。 (对@Wazner和@MacakM来说 )

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