使用"表达身体功能和属性"有什么好处?

时间:2016-10-29 16:56:09

标签: c# c#-6.0

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

Examples

public override string ToString() => string.Format("{0}, {1}", First, Second);

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

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

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

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

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

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

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

答案 2 :(得分:5)

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

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和更新版本上可用的功能,但是如果你想在较旧的VS版本中使用,你需要从nuget安装C#6.0