Terangkan konsep delegasi dalam C#
Jika anda seorang pengaturcara C, anda boleh menganggap perwakilan sebagai penunjuk kepada fungsi. Walau bagaimanapun, perwakilan dalam C# adalah lebih daripada sekadar penunjuk fungsi mudah. Artikel ini menerangkan konsep delegasi dan penggunaannya dalam pengaturcaraan harian.
Pada asasnya, delegasi memberikan tahap tidak arah. Mereka merangkum sekeping kod yang boleh dihantar dan dilaksanakan dengan cara yang selamat jenis. Daripada melakukan tingkah laku serta-merta, ia terkandung dalam objek. Anda boleh melakukan beberapa operasi pada objek ini, salah satunya adalah untuk melaksanakan tingkah laku yang terkandung.
Menggunakan perwakilan membolehkan kami menulis fungsi tertib lebih tinggi, iaitu fungsi yang boleh menerima fungsi sebagai parameter atau mengembalikan fungsi sebagai nilai pulangan. Jenis perwakilan mentakrifkan tandatangan kaedah yang boleh diwakili oleh perwakilan, khususnya jenis pemulangan kaedah dan jenis parameternya. Dalam contoh berikut, Transformer ialah perwakilan yang boleh mewakili sebarang kaedah yang menerima dan mengembalikan integer.
delegate int Transformer(int x);
Kami boleh menetapkan sebarang kaedah (termasuk lambda, contoh atau kaedah statik) kepada tika Transformer yang memenuhi tandatangan. Contohnya -
Transformer square = x => x * x; Transformer cube = x => x * x * x; Console.WriteLine(square(3)); // prints 9 Console.WriteLine(cube(5)); // prints 125
Bila hendak menggunakan delegasi?
Perwakilan biasanya digunakan apabila kod yang ingin melaksanakan operasi tertentu tidak mengetahui butiran operasi tersebut tetapi mengetahui antara muka untuk operasi tersebut. p>
Dalam pengaturcaraan, kita sering menghadapi situasi di mana kita perlu melakukan operasi tertentu, tetapi kita tidak tahu terlebih dahulu kaedah mana yang perlu dipanggil untuk melaksanakannya. Wakil membantu kami menyelesaikan masalah ini dengan menggantikan tingkah laku dengan perwakilan dan kemudian memberikan contoh konkrit perwakilan dengan tingkah laku yang sesuai mengikut konteks dan situasi yang diperlukan.
Untuk membolehkan perwakilan melakukan apa sahaja, empat perkara perlu berlaku -
1) Jenis perwakilan perlu diisytiharkan.
Jenis perwakilan pada asasnya ialah takrifan fungsi yang diwakilinya, iaitu ia terdiri daripada parameter, jenis yang akan diterima oleh fungsi dan jenis pemulangan yang dipulangkan.
Sebagai contoh, jenis perwakilan yang mewakili kaedah yang menerima dua nombor sebagai input dan mengembalikan nombor boleh diisytiharkan sebagai -
delegate int Processor(int numOne, int numTwo);
Pemproses ialah jenis, serupa dengan jenis yang dicipta oleh kelas. Untuk mencipta contoh jenis ini, anda memerlukan kaedah yang menerima dua nombor sebagai input dan mengembalikan nilai boolean.
2) Kod yang hendak dilaksanakan mesti terkandung dalam kaedah.
Tentukan kaedah dengan tandatangan yang sama seperti jenis perwakilan di atas dan lakukan apa yang anda mahu bergantung pada situasi masa jalan. Sebagai contoh, mana-mana kaedah berikut boleh digunakan untuk mencipta tika Pemproses kerana kesemuanya mengambil dua nombor dan mengembalikan nombor.
static int Add(int numOne, int numTwo){ Return numOne + numTwo; } static int Subtract(int numOne, int numTwo){ Return numOne - numTwo; }
3) Contoh perwakilan mesti dibuat.
Sekarang anda mempunyai jenis perwakilan dan kaedah dengan tandatangan yang betul, anda boleh membuat contoh jenis perwakilan itu. Apabila melakukan ini, kami pada dasarnya memberitahu pengkompil C# untuk melaksanakan kaedah ini apabila contoh perwakilan dipanggil.
Processor processorOne = new Processor(Add); Processor processorTwo = new Processor(Subtract);
Contoh di atas menganggap bahawa kaedah Tambah dan Tolak ditakrifkan dalam kelas yang sama di mana kita mencipta contoh perwakilan. Jika kaedah ini ditakrifkan dalam kelas yang berbeza, kami memerlukan contoh kelas itu.
4) Contoh perwakilan mesti dipanggil.
Ini hanya memanggil kaedah pada contoh perwakilan, tanpa menghairankan dinamakan Invoke. Kaedah pada contoh perwakilan ini mempunyai senarai parameter dan jenis pulangan yang sama seperti yang ditentukan oleh pengisytiharan jenis perwakilan. Memanggil Invoke akan melaksanakan operasi contoh perwakilan.
int sum = processorOne.Invoke(3, 5);
Tetapi, C# menjadikannya lebih mudah. Anda boleh memanggil contoh perwakilan secara langsung seolah-olah ia adalah kaedah itu sendiri. Contohnya,
int difference = processorTwo(10, 6);
Menggabungkan dan mengalih keluar perwakilan
Jika kami ingin melakukan satu siri operasi berbeza dengan satu panggilan contoh perwakilan, C# membenarkan kami melakukan ini. sistem. Jenis perwakilan mempunyai dua kaedah statik yang dipanggil Combine dan Remove.
1. Komposisi
Mencipta perwakilan baharu dengan senarai panggilan yang menggabungkan senarai panggilan wakil yang diluluskan sebagai hujah. Apabila tika perwakilan baharu dipanggil, semua operasinya dilakukan secara berurutan.
public static Delegate Combine(params Delegate[] delegates); // OR public static Delegate Combine(Delegate a, Delegate b);
Jika sebarang operasi dalam senarai panggilan memberikan pengecualian, ia akan menghalang sebarang operasi berikutnya daripada dilaksanakan.
2. Padam
Alih keluar kejadian terakhir senarai panggilan perwakilan daripada senarai panggilan perwakilan lain. Mengembalikan perwakilan baharu yang mengandungi senarai panggilan yang dibentuk dengan mengambil senarai panggilan sumber dan mengalih keluar kejadian terakhir senarai panggilan nilai.
public static Delegate Remove(Delegate source, Delegate value);
Ringkasan
Seorang perwakilan merangkum gelagat menggunakan jenis dan set parameter tertentu, serupa dengan antara muka kaedah tunggal.
Tandatangan jenis yang diterangkan oleh pengisytiharan jenis perwakilan menentukan kaedah yang boleh digunakan untuk membuat contoh perwakilan dan tandatangan panggilan.
Mencipta contoh perwakilan memerlukan kaedah yang ingin kita laksanakan apabila perwakilan dipanggil.
Adegan perwakilan tidak boleh diubah, serupa dengan rentetan.
Setiap contoh perwakilan mengandungi senarai panggilan - senarai operasi.
Adegan perwakilan boleh digabungkan dan dipadamkan antara satu sama lain.
ul>
Contoh
Demonstrasi masa nyata
using System; class Program{ delegate int Transformer(int x); delegate int Processor(int numOne, int numTwo); static void Main(){ Transformer square = x => x * x; Transformer cube = x => x * x * x; Console.WriteLine(square(3)); // prints 9 Console.WriteLine(cube(5)); // prints 125 Processor processorOne = new Processor(Add); Processor processorTwo = new Processor(Subtract); int sum = processorOne.Invoke(3, 5); Console.WriteLine(sum); // prints 8 int difference = processorTwo(10, 6); Console.WriteLine(difference); // prints 4 } static int Add(int numOne, int numTwo){ return numOne + numTwo; } static int Subtract(int numOne, int numTwo){ return numOne - numTwo; } }
Output
9 125 8 4
Atas ialah kandungan terperinci Terangkan konsep delegasi dalam C#. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Kaedah penggunaan simbol dalam bahasa C meliputi aritmetik, tugasan, syarat, logik, pengendali bit, dan lain-lain. Operator aritmetik digunakan untuk operasi matematik asas, pengendali tugasan digunakan untuk penugasan dan penambahan, penolakan, pendaraban dan tugasan pembahagian, pengendali keadaan digunakan untuk operasi yang digunakan untuk operasi yang digunakan untuk Operasi Bit untuk Penunjuk null, penanda akhir fail, dan nilai bukan angka.

Perbezaan antara multithreading dan asynchronous adalah bahawa multithreading melaksanakan pelbagai benang pada masa yang sama, sementara secara tidak sengaja melakukan operasi tanpa menyekat benang semasa. Multithreading digunakan untuk tugas-tugas yang berintensifkan, sementara asynchronously digunakan untuk interaksi pengguna. Kelebihan multi-threading adalah untuk meningkatkan prestasi pengkomputeran, sementara kelebihan asynchronous adalah untuk tidak menghalang benang UI. Memilih multithreading atau asynchronous bergantung kepada sifat tugas: tugas-tugas intensif pengiraan menggunakan multithreading, tugas yang berinteraksi dengan sumber luaran dan perlu menyimpan respons UI menggunakan asynchronous.

Dalam C, jenis char digunakan dalam rentetan: 1. Simpan satu watak; 2. Gunakan array untuk mewakili rentetan dan berakhir dengan terminator null; 3. Beroperasi melalui fungsi operasi rentetan; 4. Baca atau output rentetan dari papan kekunci.

Arus char menyimpan urutan watak dalam bahasa C dan diisytiharkan sebagai array_name char [saiz]. Unsur akses diluluskan melalui pengendali subskrip, dan elemen berakhir dengan terminator null '\ 0', yang mewakili titik akhir rentetan. Bahasa C menyediakan pelbagai fungsi manipulasi rentetan, seperti strlen (), strcpy (), strcat () dan strcmp ().

Dalam bahasa C, watak -watak khas diproses melalui urutan melarikan diri, seperti: \ n mewakili rehat garis. \ t bermaksud watak tab. Gunakan urutan melarikan diri atau pemalar watak untuk mewakili watak khas, seperti char c = '\ n'. Perhatikan bahawa backslash perlu melarikan diri dua kali. Platform dan penyusun yang berbeza mungkin mempunyai urutan melarikan diri yang berbeza, sila rujuk dokumentasi.

Dalam bahasa C, penukaran jenis char boleh ditukar secara langsung kepada jenis lain dengan: Casting: Menggunakan aksara pemutus. Penukaran Jenis Automatik: Apabila satu jenis data dapat menampung jenis nilai lain, pengkompil secara automatik menukarkannya.

Tiada fungsi jumlah terbina dalam dalam bahasa C, jadi ia perlu ditulis sendiri. Jumlah boleh dicapai dengan melintasi unsur -unsur array dan terkumpul: Versi gelung: SUM dikira menggunakan panjang gelung dan panjang. Versi Pointer: Gunakan petunjuk untuk menunjuk kepada unsur-unsur array, dan penjumlahan yang cekap dicapai melalui penunjuk diri sendiri. Secara dinamik memperuntukkan versi Array: Perlawanan secara dinamik dan uruskan memori sendiri, memastikan memori yang diperuntukkan dibebaskan untuk mengelakkan kebocoran ingatan.

Dalam bahasa C, perbezaan utama antara char dan wchar_t adalah pengekodan aksara: char menggunakan ASCII atau memanjangkan ASCII, WCHAR_T menggunakan unicode; Char mengambil 1-2 bait, wchar_t mengambil 2-4 bait; Char sesuai untuk teks bahasa Inggeris, WCHAR_T sesuai untuk teks berbilang bahasa; CHAR disokong secara meluas, WCHAR_T bergantung kepada sama ada penyusun dan sistem operasi menyokong Unicode; Char adalah terhad dalam pelbagai watak, WCHAR_T mempunyai pelbagai watak yang lebih besar, dan fungsi khas digunakan untuk operasi aritmetik.
