Pengubahsuaian Kelakuan Kaedah Waktu Jalan dalam C#
Artikel ini meneroka teknik untuk mengubah aliran pelaksanaan kaedah C# secara dinamik pada masa jalan, membolehkan suntikan kod sebelum dan selepas pelaksanaan kaedah. Penyelesaian itu memanfaatkan perpustakaan Harmony.
Harmony, perpustakaan sumber terbuka yang berkuasa, memudahkan manipulasi kaedah masa jalan dalam C#. Ia menggantikan kaedah asal dengan kaedah proksi, memasukkan urutan kod tersuai secara strategik. Ini membolehkan pembangun menambah ciri baharu atau mengubah suai ciri sedia ada tanpa menyusun semula.
Butiran Pelaksanaan:
Harmoni menggunakan gabungan penjanaan kaedah dinamik dan pengubahsuaian pemasangan. Ia mencipta kaedah proksi untuk setiap kaedah sasaran, menghasilkan kod Bahasa Perantaraan (IL) yang memanggil kaedah yang ditentukan pengguna pada titik yang tepat semasa pelaksanaan.
Contoh Kod:
Mari kita periksa kaedah sampel:
<code class="language-csharp">public class SomeGameClass { public int DoSomething() { // Original method logic return 0; } }</code>
Menggunakan tampalan berasaskan atribut Harmony:
<code class="language-csharp">using HarmonyLib; [HarmonyPatch(typeof(SomeGameClass))] [HarmonyPatch("DoSomething")] class Patch { static void Prefix() { // Code executed before the original method } static void Postfix(ref int __result) { // Code executed after the original method, __result is the return value } }</code>
Sebagai alternatif, tampalan manual menggunakan pantulan:
<code class="language-csharp">using HarmonyLib; using System.Reflection; Harmony harmony = new Harmony("mymod"); harmony.Patch( typeof(SomeGameClass).GetMethod("DoSomething"), new HarmonyMethod(typeof(Patch).GetMethod("Prefix")), new HarmonyMethod(typeof(Patch).GetMethod("Postfix")) );</code>
Ringkasan:
Harmony menawarkan penyelesaian yang mantap untuk peningkatan kaedah dinamik dalam C#, terutamanya berharga untuk pembangunan permainan dan penciptaan pemalam. Dokumentasi yang jelas dan API intuitif memudahkan penyesuaian kaedah yang lancar, membolehkan pembangun menyesuaikan dan memanjangkan aplikasi dengan cekap.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menyuntik kod secara dinamik sebelum dan selepas pelaksanaan kaedah C# semasa runtime?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!