web-dev-qa-db-fra.com

Quels sont les avantages de l'utilisation des "Fonctions et propriétés du corps d'expression"

J'en ai vu beaucoup utiliser cette nouvelle fonctionnalité, mais quel est l'avantage d'utiliser ces expressions?

Exemples :

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!

15
TheRealVira

Il offre une meilleure lisibilité et économise de l'espace dans votre code. C'est juste plus agréable.

7
MacakM

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

5
Tinwor

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):

  • Les "fonctions et propriétés du corps d'expression" semblent être une bonne pratique en raison d'un code plus compact et plus lisible. (merci à @ Wazner et @ MacakM )

  • Il est également judicieux de les utiliser, car ils ont l'air plus modulaires et ressemblent plus à OOP code

5
TheRealVira