Pemintasan Panggilan Kaedah dalam C#
C# tidak mempunyai sokongan AOP langsung, tetapi teknik pintar membolehkan pemintasan panggilan kaedah. Mari kita periksa ini dengan contoh kelas:
<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>
Pemintasan Tanpa Mengubah Kaedah
Pendekatan ini memanfaatkan Reflection.Emit
untuk suntikan kod dinamik:
GetMethods
untuk mendapatkan kaedah yang memerlukan pemintasan.ILGenerator
untuk kaedah dipintas.ILGenerator
untuk memasukkan panggilan ke Logger.LogStart
sebelum dan Logger.LogEnd
selepas pelaksanaan kaedah.Pemintasan dengan Perubahan Kecil Pemanggil
Mengubah suai Caller.Call
sedikit membenarkan pendekatan berasaskan acara:
Caller.Call
, mencetuskan Logger
panggilan sebelum dan selepas pelaksanaan kaedah.Implikasi Prestasi
Kaedah Reflection.Emit
, walaupun berkuasa, memperkenalkan overhed prestasi. Pelaksanaan pengeluaran harus mengutamakan strategi pengoptimuman.
Atas ialah kandungan terperinci Bagaimanakah saya boleh memintas Panggilan Kaedah dalam C# Tanpa Sokongan AOP Eksplisit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!