2013-04-19 10 views
24

Sto cercando di trovare modi per registrare il nome del metodo in modo efficiente w.r.t. velocità e manutenibilità. Immagino che in .Net 4.5 Caller Information attributes siano esposti solo per questo scopo tranne la parte di velocità. Ritengo che questi siano solo degli zuccheri sintattici derivanti dall'uso di System.Reflection.MethodBase.GetCurrentMethod() o stackTrace.GetFrame (1) .GetMethod(). Nome (ottenuto da here). (o) Anche questi metodi offrono vantaggi in termini di prestazioni?Prestazioni colpite utilizzando gli attributi Informazioni chiamante

In C#, C'è un modo per ottenere il nome del metodo in fase di compilazione (come in c++)?

+4

Avete in realtà profilato le loro prestazioni, o sono semplicemente anticipando un problema che potrebbe non essere un problema? –

+0

@DanielKelley Non ho misurato la prestazione. Volevo sapere cosa sta succedendo sotto le copertine degli attributi Informazioni sul chiamante. Daniel ha detto che la sostituzione avviene al momento della compilazione, che è esattamente quello che sto cercando. – Imran

risposta

51

Gli attributi di informazioni sul chiamante fanno in modo che il compilatore C# fornisca il nome del chiamante nel callsite. Questo succede in fase di compilazione, non c'è nessuna riflessione in gioco.

public void DoProcessing() 
{ 
    LogCall(); 
} 

public void LogCall([CallerMemberName] string memberName = "") 
{ 
    Console.WriteLine(memberName + " was called."); 
} 

sarà compilato a:

public void DoProcessing() 
{ 
    LogCall("DoProcessing"); 
} 

public void LogCall(string memberName) 
{ 
    Console.WriteLine(memberName + " was called."); 
} 
+0

Questo è esattamente quello che sto cercando. Grazie per la sua pronta risposta. Hai qualche idea per ottenere la sostituzione del tempo di compilazione nelle versioni precedenti di .NET? – Imran

+1

[CallerMemberInfo] funziona con qualsiasi versione di .NET purché si utilizzi il compilatore C# 5. Vedi http://stackoverflow.com/questions/13381917/is-the-callermembername-attribute-in-4-5-able-to-be-faked – Daniel

+0

Grazie per il link. Attualmente non sto usando il compilatore C# 5 che richiede VS2012. – Imran

Problemi correlati