C#의 메서드 호출 가로채기
C#에는 직접적인 AOP 지원이 부족하지만 영리한 기술을 사용하여 메서드 호출을 가로챌 수 있습니다. 예제 클래스를 통해 이를 살펴보겠습니다.
<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>
방법 변경 없이 차단
이 접근 방식은 Reflection.Emit
동적 코드 삽입을 활용합니다.
GetMethods
을 사용하세요.ILGenerator
를 만듭니다.ILGenerator
에 대한 호출을 삽입하려면 Logger.LogStart
를 사용하세요.Logger.LogEnd
사소한 발신자 변경으로 차단
을 약간 수정하면 이벤트 기반 접근 방식이 허용됩니다.Caller.Call
Caller.Call
호출을 트리거합니다.Logger
성능에 미치는 영향
방법은 강력하지만 성능 오버헤드를 발생시킵니다. 프로덕션 구현에서는 최적화 전략을 우선시해야 합니다.Reflection.Emit
위 내용은 명시적인 AOP 지원 없이 C#에서 메서드 호출을 어떻게 가로챌 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!