2015-02-09 5 views
24

In un nuovo C# 6.0 possiamo definire metodi e proprietà utilizzando espressioni lambda.Componenti funzione con espressione corporea efficienza e prestazioni in C# 6.0

Per esempio questa proprietà

public string Name { get { return First + " " + Last; } } 

possono essere ora definiti come segue:

public string Name => First + " " + Last; 

Le informazioni sui membri della funzione di espressione-boided potete trovare qui: http://blogs.msdn.com/b/csharpfaq/archive/2014/11/20/new-features-in-c-6.aspx

Qualcuno sa se c'è un sovraccarico quando si utilizza la nuova sintassi? Può rallentare (o migliorare l'efficienza) dell'applicazione o forse non importa?

+10

È solo zucchero di sintassi, non ha alcun effetto sul codice generato. Usa ildasm.exe per convincere te stesso. –

+1

Non conosco questa funzione, ma sono abbastanza sicuro che ogni zucchero sintattico sia compilato con lo stesso codice. Quindi non c'è differenza nelle prestazioni di runtime. –

risposta

53

In un nuovo C# 6.0 è possibile definire metodi e proprietà utilizzando espressioni lambda.

No, non è possibile. È possibile definire il metodo e i corpi delle proprietà utilizzando la sintassi che ha l'aspetto di come un'espressione lambda, in quanto utilizza il token =>.

Tuttavia, questo non importante non significa che c'è un tipo delegato coinvolti. (Mentre un'espressione lambda è consentita solo in un contesto in cui è convertita in un albero di espressioni o in un tipo di delegato.)

Questo è zucchero puramente sintattico. I tuoi due frammenti di codice di esempio verranno compilati con lo stesso identico IL. È solo un modo diverso di rappresentare il corpo di un metodo o un metodo di proprietà.

+0

Il fatto che vengano compilati con lo stesso identico IL è garantito o è un dettaglio di implementazione? Ad esempio, mi chiedo se alcuni compilatori potrebbero scegliere in futuro di applicare un'allineamento aggressivo in questi casi, purché i requisiti di base per l'inlining siano soddisfatti (non virtuali)? – Kryptos

+0

@Kryptos: se fosse valido per i membri con un'espressione corporea, mi aspetto che sia valido per i membri regolari. Dubito che vedremo qualche garanzia riguardo a IL poiché le specifiche parlano molto raramente di IL ... Ma le specifiche potrebbero ben dire che i due sono equivalenti. –

6

Si compileranno fino allo stesso IL, è sempre possibile testarlo eseguendolo e utilizzando ildasm per estrarre l'IL.

0

Questa sintassi consente ai membri di scrivere più semplice in stile espressione lambda. Questa è l'unica differenza.

Problemi correlati