2012-05-01 18 views
5

Vorrei poter contrassegnare una funzione in qualche modo (attributi forse?) In modo che quando viene chiamata da qualsiasi luogo, un altro codice ottenga i parametri e restituisca un valore anziché il chiamata funzione, o può lasciare che la funzione venga eseguita normalmente.Esegui codice prima che venga eseguita la funzione chiamata

Lo userei per un facile caching.

Per esempio, se ho avuto una funzione chiamata Add10 e sarebbe simile a questa:

int Add10 (int n) 
{ 
    return n + 10; 
} 

Se la funzione go chiamato più volte con lo stesso valore (Add10 (7)) sarebbe sempre dare lo stesso risultato (17), quindi non ha senso ricalcolare ogni volta. Naturalmente, non lo farei con funzioni così semplici, ma sono sicuro che puoi capire cosa intendo.

C# fornisce un modo per fare ciò che voglio? Ho bisogno di un modo per contrassegnare una funzione come memorizzata nella cache in modo che quando qualcuno aggiunge Add10 (16) un po 'di codice da qualche parte viene eseguito per controllare un dizionario è già noto il valore Add10 di 16 e restituirlo se lo facciamo, calcolare, memorizzare e tornare se non lo facciamo.

+0

consultare http://stackoverflow.com/questions/6180242/generating-a-unique-cache-key-based-on-method-arguments –

+0

C'è un sacco di thread su questo qui in StackOverflow, ad es. http://stackoverflow.com/questions/4929540/is-there-anyway-to-cache-function-method-in-c-sharp – abaelter

risposta

0

anziché la funzione, quindi vorrei esporre un Func<>delegato:

Func<int, int> add10 = (n) => 
{ 
    // do some other work 
    ... 

    int result = Add10(n); // calling actual function 

    // do some more perhaps even change result 
    ... 

    return result; 

}; 

E poi:

int res = add10(5); // invoking the delegate rather than calling function 
0

MbCache potrebbe essere quello che stai cercando.

Problemi correlati