Translate

domingo, 9 de febrero de 2025

Interceptores en C#


Con la llegada de C# 12, una de las características más interesantes introducidas es la capacidad de interceptar llamadas a métodos mediante Interceptores. Esta funcionalidad permite modificar o analizar la ejecución de un método antes o después de su invocación, lo que resulta útil para aspectos como logging, validación, caching y manejo de excepciones.

Los interceptores son una característica que permite redirigir llamadas a métodos a una lógica personalizada en tiempo de compilación. Esto brinda un alto nivel de control sin necesidad de modificar el código fuente original.

Para implementar interceptores en C#, se usa el atributo [InterceptsLocation], que indica que un método debe reemplazar otro en una ubicación específica del código.

Supongamos que tenemos un método que realiza una operación matemática simple:


public static class MathOperations

{

    public static int Add(int a, int b) => a + b;

}


Podemos definir un interceptor que intercepte esta llamada y agregue una funcionalidad adicional, como logging:



using System.Runtime.CompilerServices;


public static class MathInterceptor

{

    [InterceptsLocation("MathOperations.cs", line: 5, column: 5)]

    public static int Add(int a, int b)

    {

        Console.WriteLine($"Interceptando llamada a Add({a}, {b})");

        return a + b;

    }

}


Para tener en cuenta: 

  • Los interceptores funcionan en tiempo de compilación y no en ejecución.
  • Solo pueden ser usados en métodos con ubicaciones explícitas dentro del código fuente.
  • Requieren compatibilidad con la infraestructura de compilación adecuada.


En mi opinión es una forma de programación por aspecto o se podria implementar con esta nueva feature.