2012-05-01 23 views
5

Me gustaría poder marcar una función de alguna manera (¿atributos quizás?) Para que cuando se llame desde cualquier lugar, algún otro código procese los parámetros y devuelva un valor en lugar del llamada función, o puede dejar que la función se ejecute normalmente.Ejecutar código antes de que se ejecute la función llamada

Lo usaría para almacenar en caché fácilmente.

Por ejemplo, si tuviera una función llamada ADD10 y que se vería así:

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

Si la función go llama repetidamente con el mismo valor (ADD10 (7)) sería siempre dan el mismo resultado (17) por lo que no tiene sentido volver a calcular cada vez. Naturalmente, no lo haría con funciones tan simples como esta, pero estoy seguro de que puedes entender lo que quiero decir.

¿C# proporciona alguna forma de hacer lo que quiero? Necesito una forma de marcar una función como almacenada en caché para que cuando alguien agrega Add10 (16) algún código en alguna parte se ejecute primero para verificar en un diccionario es que ya sabemos el valor Add10 de 16 y lo devolvemos si lo hacemos, calculamos, almacenamos y regresar si no lo hacemos.

+0

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

+0

Aquí hay muchos temas en stackoverflow, p. Ej. http://stackoverflow.com/questions/4929540/is-there-anyway-to-cache-function-method-inc-c-sharp – abaelter

Respuesta

0

En lugar de la función, entonces me gustaría exponer una Func<>delegado:

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; 

}; 

Y luego:

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