Penulis konsep yang ditugaskan: Liang Binyu Dikutip dari "C# Beginner Classroom" akan segera diterbitkan
Kelas [email protected]
http://www.cnblogs.com/BeginnerClassroom
Terkadang kita perlu menggunakan suatu fungsi sebagai parameter dari fungsi lain, lalu kita perlu menggunakan mekanisme delegasi. Delegasi adalah konsep yang sulit untuk dijelaskan dengan jelas. Penulis berpikir keras selama beberapa hari dan akhirnya memberikan contoh yang cerdik.
Selanjutnya, kita merancang fungsi pertunjukan sirkus RunCircus(). Parameter pertamanya adalah fungsi yang merepresentasikan hewan. Hewan apa pun yang diteruskan ke fungsi tersebut, penampilan hewan tersebut akan ditampilkan. Silakan buat proyek baru bernama "Delegasi" dan tambahkan kode berikut.
Cobalah: Mendefinisikan delegasi
//"C# Kelas Pemula"
//Fungsi: pertunjukan anjing
kekosongan statis DogAct (nama string)
{
Console.WriteLine("Halo,Saya " + nama + "!");
Konsol.WriteLine(@"
.----.
_.'__ `.
.--(#)(##)---/#
.'
: , #####
`-..__.-' _.-###/
`;_: `''
.''''''''`.
/,Snoopy,
// DINGIN! \
`-._______.-'
___`.
(______|______)");
}
//Fungsi: pertunjukan kucing
kekosongan statis CatAct (nama string)
{
Console.WriteLine("Halo,Saya " + nama + "!");
Konsol.WriteLine(@"
.-.
|.`/|
/ '.()--
|.'._/
_|.
= '-' /=
'-._____.-'
/`/___/`
//o o/
(_| |_)
|____,____|
(____|____)");
}
//Fungsi: pertunjukan singa
kekosongan statis LionAct (nama string)
{
Console.WriteLine("Halo,Saya " + nama + "!");
Konsol.WriteLine(@"
,%%%%%%%%,
,%%/%%%%/%%
,%%%c "" J/%%%
%.
`%%.
`%% `%%%%(__Y__)%%'
// ;%%%%`-/%%%'
(( / `%%%%%%%'
\ .' |
\ / |
\/ ) |
/_ |.|__
(____________)))))))");
}
//definisikan delegasi
delegasi batalkan AnimalAct(nama string);
//Fungsi: pertunjukan sirkus (parameter pertama adalah delegasi tipe AnimalAct)
static void RunCircus(AnimalAct animalAct, nama string)
{
animalAct(nama);
}
kekosongan statis Utama (string[] args)
{
//Konversi fungsi DogAct() menjadi delegasi tipe AnimalAct
AnimalAct deleDogAct = AnimalAct baru(DogAct);
//Lewati delegasi deleDogAct ke fungsi RunCircus()
RunCircus(deleDogAct, "Snoopy");
//Ubah fungsi CatAct() menjadi delegasi tipe AnimalAct dan teruskan ke fungsi RunCircus()
RunCircus(AnimalAct baru(CatAct), " Kitty ");
}
Hasil yang berjalan adalah sebagai berikut:
"Kelas Pemula C#"
Parameter pertama dari fungsi RunCircus(AnimalAct animalAct, string name) sebenarnya adalah fungsi yang mewakili hewan. Fungsi apa yang diteruskan ke fungsi tersebut akan menggunakan jenis hewan apa untuk menjalankannya. Namun untuk melakukan pengecekan tipe yang ketat, kita tidak bisa langsung meneruskan nama fungsi ke dalamnya, tetapi harus terlebih dahulu mendefinisikan delegasi (Dlelegate), yaitu mendefinisikan "tipe fungsi".
Delegasi dideklarasikan dengan kata kunci delegasi. Pernyataan di atas mendefinisikan delegasi (tipe fungsi) yang disebut AnimalAct, yang dengan jelas menentukan tipe parameter delegasi dan tipe nilai kembalian. Saat kita perlu menggunakan suatu fungsi sebagai parameter, pertama-tama kita harus mengubahnya menjadi instance delegasi.
Contoh delegasi ini kemudian diteruskan sebagai parameter ke fungsi yang memanggilnya.
Dapat dilihat bahwa instance delegasi deleDogAct sebenarnya adalah alias dari fungsi DogAct(). Jelasnya, delegasi dan fungsi yang didelegasikan harus memiliki tipe parameter dan tipe kembalian yang sama.
Dalam program kami, sirkus selalu memanggil fungsi RunCircus() untuk melakukan. Saat mendefinisikan fungsi RunCircus(), kita tidak mengetahui atau peduli fungsi mana yang diwakili oleh delegasi yang diteruskan ke fungsi tersebut. Fungsi ini tidak akan terwujud sampai fungsi RunCircus() dipanggil dan parameter aktual diteruskan ke fungsi tersebut. Apapun parameter sebenarnya yang diteruskan ke sana, pertunjukan akan dilakukan. Jika Anda meneruskannya ke delegasi deleDogAct, sirkus akan menampilkan pertunjukan anjing; jika Anda meneruskannya ke delegasi deleCatAct, sirkus akan menampilkan pertunjukan kucing; delegasi deleLionAct, sirkus akan menampilkan pertunjukan kucing. Oleh karena itu, fungsi yang menggunakan delegasi sebagai parameter memiliki sifat umum tertentu.