Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memuatkan dan Menggunakan Kaedah Secara Dinamik daripada DLL dalam C# Beyond Assembly.LoadFile()?
Dalam C#, pembangun selalunya perlu memuatkan perpustakaan pautan dinamik (DLL) secara dinamik, terutamanya apabila menggunakan pustaka pihak ketiga atau konfigurasi masa jalan. Artikel ini bertujuan untuk menangani soalan lazim tentang had penggunaan kaedah Assembly.LoadFile() dan menyediakan penyelesaian berasaskan objek pantulan dan dinamik.
Seperti yang dinyatakan dalam soalan, menggunakan Assembly.LoadFile() berjaya memuatkan DLL dan membenarkan maklumat seperti nama kelas diambil semula. Walau bagaimanapun, ia mungkin tidak boleh memanggil kaedah secara langsung dalam DLL yang dimuatkan.
Untuk mengatasi pengehadan ini, pembangun boleh menggunakan refleksi, yang membolehkan penyeruan dinamik kaedah dan objek operasi pada masa jalan. Untuk melakukan ini:
Dapatkan objek Jenis kelas: var type = DLL.GetExportedTypes().FirstOrDefault();
Buat tika kelas: var c = Activator.CreateInstance(type);
Gunakan kaedah InvokeMember() untuk memanggil kaedah sasaran:
<code class="language-csharp"> type.InvokeMember("Output", BindingFlags.InvokeMethod, null, c, new object[] { "Hello" });</code>
Untuk aplikasi yang menyasarkan .NET 4.0 atau lebih tinggi, kata kunci dinamik boleh memudahkan lagi proses ini. Menggunakan pendekatan ini anda boleh mengakses ahli secara langsung tanpa refleksi jenis:
<code class="language-csharp">dynamic c = Activator.CreateInstance(type); c.Output("Hello");</code>
Untuk meringkaskan, manakala Assembly.LoadFile() membenarkan memuatkan DLL, pantulan atau objek dinamik diperlukan untuk memanggil kaedah dalam modul yang dimuatkan. Bergantung pada keperluan aplikasi, kedua-dua kaedah menyediakan penyelesaian yang berdaya maju untuk memuatkan secara dinamik dan menggunakan DLL pada masa jalan dalam C#.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memuatkan dan Menggunakan Kaedah Secara Dinamik daripada DLL dalam C# Beyond Assembly.LoadFile()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!