Interception d'appel de méthode en C#
C# ne prend pas en charge directement AOP, mais des techniques intelligentes permettent l'interception des appels de méthode. Examinons cela avec des exemples de classes :
<code class="language-csharp">public class Caller { public static void Call() { Traced traced = new Traced(); traced.Method1("test", 10); traced.Method2(new object()); } } public class Traced { public void Method1(string name, int value) { } public void Method2(object obj) { } } public class Logger { public static void LogStart(MethodInfo method, object[] parameters) { /* Logging logic */ } public static void LogEnd(MethodInfo method) { /* Logging logic */ } }</code>
Interception sans modification des méthodes
Cette approche exploite Reflection.Emit
pour l'injection dynamique de code :
GetMethods
pour obtenir des méthodes nécessitant une interception.ILGenerator
pour les méthodes interceptées.ILGenerator
pour insérer des appels à Logger.LogStart
avant et Logger.LogEnd
après l'exécution de la méthode.Interception avec changements mineurs d'appelant
Modifier Caller.Call
légèrement permet une approche événementielle :
Caller.Call
, déclenchant des Logger
appels avant et après l'exécution de la méthode.Implications sur les performances
La méthode Reflection.Emit
, bien que puissante, introduit une surcharge de performances. Les mises en œuvre de la production doivent donner la priorité aux stratégies d'optimisation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!