[叩响C#之门]写给初学者:委托的概念
2010-09-30 20:56:41 来源:WEB开发网有时我们需要将一个函数作为另一个函数的参数,这时就要用到委托(Delegate)机制。委托是一个较难讲清楚的概念,笔者苦思数日,终于想出了一个巧妙的例子。
下面我们设计一个马戏表演函数RunCircus(),它的第一个参数是代表动物的函数,传给它什么样的动物,就进行什么动物的表演。请新建一个名为“Delegate”的项目,然后添加如下代码。
//函数:狗表演
static void DogAct(string name)
{
Console.WriteLine("Hello,I am " + name + "!");
Console.WriteLine(@"
.----.
_.'__ `.
.--(#)(##)---/#\
.' @ /###\
: , #####
`-..__.-' _.-\###/
`;_: `''
.'''''''`.
/,Snoopy ,\
// COOL! \\
`-._______.-'
___`. | .'___
(______|______)");
}
//函数:猫表演
static void CatAct(string name)
{
Console.WriteLine("Hello,I am " + name + "!");
Console.WriteLine(@"
.-. __ _ .-.
| ` / \ |
/ '.()--\
| '._/
_| O _ O |_
=\ '-' /=
'-._____.-'
/`/\___/\`\
/\/o o\/\
(_| |_)
|____,____|
(____|____)");
}
//函数:狮子表演
static void LionAct(string name)
{
Console.WriteLine("Hello,I am " + name + "!");
Console.WriteLine(@"
,%%%%%%%%,
,%%/\%%%%/\%%
,%%%\c "" J/%%%
%. %%%%/ o o \%%%
`%%. %%%% _ |%%%
`%% `%%%%(__Y__)%%'
// ;%%%%`\-/%%%'
(( / `%%%%%%%'
\\ .' |
\\ / \ | |
\\/ ) | |
\ /_ | |__
(___________)))))))");
}
//定义委托
delegate void AnimalAct(string name);
//函数:马戏表演(第一个参数为AnimalAct型委托)
static void RunCircus(AnimalAct animalAct, string name)
{
animalAct(name);
}
static void Main(string[] args)
{
//把函数DogAct()转换为AnimalAct型委托
AnimalAct deleDogAct = new AnimalAct(DogAct);
//把委托deleDogAct传给函数RunCircus()
RunCircus(deleDogAct, "Snoopy");
//把函数CatAct()转换为AnimalAct型委托,并传给函数RunCircus()
RunCircus(new AnimalAct(CatAct), " Kitty ");
}
- ››初学者对于三层框架的理解
- ››写给初学者:多线程系列( 十)——死锁(Deadlock)...
- ››写给初学者:多线程系列( 十一)——线程池(Thread...
- ››写给初学者:多线程系列(一)——线程的概念
- ››写给初学者:多线程系列(二)—— Thread类(线程类...
- ››写给初学者:多线程系列(三)——线程的优先级
- ››写给初学者:多线程系列(四)——线程的插入 Join(...
- ››写给初学者:多线程系列(五)——线程的状态
- ››写给初学者:多线程系列(六)——线程同步的概念
- ››写给初学者:多线程系列(七)——互锁(Interlocke...
- ››写给初学者:多线程系列(八)——管程类(Monitor类...
- ››写给初学者:多线程系列( 九)——互斥体(Mutex类...
赞助商链接