J'en ai vu beaucoup utiliser cette nouvelle fonctionnalité, mais quel est l'avantage d'utiliser ces expressions?
public override string ToString() => string.Format("{0}, {1}", First, Second);
public string Text =>
string.Format("{0}: {1} - {2} ({3})", TimeStamp, Process, Config, User);
Cette question est différente de celle-ci , car je ne demande pas seulement si les performances et l'efficacité changent, mais aussi la différence du code compilé (code IL) et si c'est la meilleure pratique et devrait être utilisé dans le monde réel.
Cette question n'est pas non plus hors sujet , car je demande une expérience d'entreprise réelle et non des recommandations. Par conséquent, ne le recommandez pas, mais expliquez pourquoi vous utiliseriez ou pourquoi vous n'utiliseriez pas cette fonctionnalité et quelles expériences vous en avez!
Il offre une meilleure lisibilité et économise de l'espace dans votre code. C'est juste plus agréable.
Une expression corporelle ne fournit qu'un moyen compact et plus propre de déclarer une propriété en lecture seule.
Du point de vue de la performance, vous écrivez ceci:
public bool MyProperty {
get {
return myMethod();
}
}
private bool myMethod() {return true;}
ou ca:
public bool MyProperty => myMethod();
private bool myMethod() {return true;}
Il n'y a pas de différence car il est traduit en IL
de la même manière.
Mais faites attention à cette chose: l'expression corporelle est une fonctionnalité disponible par deafult sur Visual Studio 2015 et une version plus récente mais si vous voulez l'utiliser dans une ancienne version VS, vous devez installer C # 6.0 à partir de nuget
Répondre à une de mes questions. J'ai testé, si le code IL est le même avec les résultats suivants:
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";
}
... générera le même code 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
Le [random value]
part est le seul code qui a changé, ce qui est logique car il change à chaque fois qu'il est compilé.
Je suis encore étudiant à l'école, je ne peux donc répondre qu'aux autres questions de mon point de vue (qui n'est pas une vision d'entreprise):