c#委托
示例1:
代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
delegate void EatDelegate(String food);
class Program
{
private static void zsEat(String food)
{
Console.WriteLine("张三吃"+food);
}
private static void lsEat(String food)
{
Console.WriteLine("李四吃"+food);
}
private static void wwEat(String food)
{
Console.WriteLine("王五吃"+food);
}
static void Main(string[] args)
{
/*定义张三,李四,王五吃food的委托,
* 并为他们的委托代理他们吃food的方法.*/
EatDelegate zs = new EatDelegate(zsEat);
EatDelegate ls = new EatDelegate(lsEat);
EatDelegate ww = new EatDelegate(wwEat);
//委托链
EatDelegate eatChain = zs + ls + ww;
Console.WriteLine("张三,李四,王五开座谈会.");
//调用委托链
eatChain("吃西瓜");
Console.WriteLine("李四出去接电话.");
/*C#在委托中重载了+=和-=操作符,
* 使它们能够对委托链进行+,-操作*/
eatChain -= ls;
eatChain("吃香蕉");
Console.WriteLine("李四回来了.");
eatChain += ls;
eatChain("吃桔子.");
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
delegate void EatDelegate(String food);
class Program
{
private static void zsEat(String food)
{
Console.WriteLine("张三吃"+food);
}
private static void lsEat(String food)
{
Console.WriteLine("李四吃"+food);
}
private static void wwEat(String food)
{
Console.WriteLine("王五吃"+food);
}
static void Main(string[] args)
{
/*定义张三,李四,王五吃food的委托,
* 并为他们的委托代理他们吃food的方法.*/
EatDelegate zs = new EatDelegate(zsEat);
EatDelegate ls = new EatDelegate(lsEat);
EatDelegate ww = new EatDelegate(wwEat);
//委托链
EatDelegate eatChain = zs + ls + ww;
Console.WriteLine("张三,李四,王五开座谈会.");
//调用委托链
eatChain("吃西瓜");
Console.WriteLine("李四出去接电话.");
/*C#在委托中重载了+=和-=操作符,
* 使它们能够对委托链进行+,-操作*/
eatChain -= ls;
eatChain("吃香蕉");
Console.WriteLine("李四回来了.");
eatChain += ls;
eatChain("吃桔子.");
}
}
}
委托的匿名方法:
代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
delegate void EatDelegate(String food);
class Program
{
static void Main(string[] args)
{
//委托链
EatDelegate eatChain=null;
//C#2.0增加的委托的匿名方法
eatChain += delegate(String food) { Console.WriteLine("张三吃"+food); };
eatChain += delegate(String food) { Console.WriteLine("李四吃"+food); };
eatChain += delegate(String food) { Console.WriteLine("王五吃" + food); };
eatChain("西瓜");
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
delegate void EatDelegate(String food);
class Program
{
static void Main(string[] args)
{
//委托链
EatDelegate eatChain=null;
//C#2.0增加的委托的匿名方法
eatChain += delegate(String food) { Console.WriteLine("张三吃"+food); };
eatChain += delegate(String food) { Console.WriteLine("李四吃"+food); };
eatChain += delegate(String food) { Console.WriteLine("王五吃" + food); };
eatChain("西瓜");
}
}
}
委托代理实例方法
代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
delegate void EatDelegate(String food);
class Man
{
private string name;
public Man(string name)
{
this.name = name;
}
public void Eat(string food)
{
Console.WriteLine(name+"吃"+food);
}
}
/*委托代理实例方法*/
class Party
{
[STAThread]
static void Main(string[] args)
{
Man zsObj = new Man("张三");
Man lsObj = new Man("李四");
Man wwObj = new Man("王五");
EatDelegate zs = new EatDelegate(zsObj.Eat);
EatDelegate ls = new EatDelegate(lsObj.Eat);
EatDelegate ww = new EatDelegate(wwObj.Eat);
//委托链
EatDelegate eatChain=zs+ls+ww;
Console.WriteLine("张三,李四,王五开座谈会.");
eatChain("吃西瓜");
Console.WriteLine("李四出去接电话.");
eatChain -= ls;
eatChain("吃香蕉");
Console.WriteLine("李四回来了.");
eatChain("吃桔子");
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
delegate void EatDelegate(String food);
class Man
{
private string name;
public Man(string name)
{
this.name = name;
}
public void Eat(string food)
{
Console.WriteLine(name+"吃"+food);
}
}
/*委托代理实例方法*/
class Party
{
[STAThread]
static void Main(string[] args)
{
Man zsObj = new Man("张三");
Man lsObj = new Man("李四");
Man wwObj = new Man("王五");
EatDelegate zs = new EatDelegate(zsObj.Eat);
EatDelegate ls = new EatDelegate(lsObj.Eat);
EatDelegate ww = new EatDelegate(wwObj.Eat);
//委托链
EatDelegate eatChain=zs+ls+ww;
Console.WriteLine("张三,李四,王五开座谈会.");
eatChain("吃西瓜");
Console.WriteLine("李四出去接电话.");
eatChain -= ls;
eatChain("吃香蕉");
Console.WriteLine("李四回来了.");
eatChain("吃桔子");
}
}
}
委托当作方法参数进行调用:
代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
delegate void EatDelegate(String food);
class Man
{
private string name;
public Man(string name)
{
this.name = name;
}
public void Eat(string food)
{
Console.WriteLine(name+"吃"+food);
}
}
/*委托作为方法的参数进行传递*/
class Party
{
/// <summary>
/// 委托作为参数进行传递
/// </summary>
/// <param name="food">吃的东西</param>
/// <param name="values">可变的委托参数</param>
static void EatToghter(String food, params EatDelegate[] values)
{
if (values==null)
{
Console.WriteLine("座谈会结束");
}
else
{
EatDelegate eatChain = null;
foreach (EatDelegate eat in values)
eatChain += eat;
eatChain(food);
Console.WriteLine();
}
}
[STAThread]
static void Main(string[] args)
{
Man zsObj = new Man("张三");
Man lsObj = new Man("李四");
Man wwObj = new Man("王五");
EatDelegate zs = new EatDelegate(zsObj.Eat);
EatDelegate ls = new EatDelegate(lsObj.Eat);
EatDelegate ww = new EatDelegate(wwObj.Eat);
//委托链
EatDelegate eatChain=zs+ls+ww;
Console.WriteLine("张三,李四,王五开座谈会.");
//调用委托作为参数的方法
EatToghter("西瓜",zs,ls,ww);
Console.WriteLine("李四出去接电话.");
//没有传递李四的委托
EatToghter("香蕉", zs, ww);
Console.WriteLine("李四回来了.");
//三个人继续吃香蕉
EatToghter("香蕉", zs, ls, ww);
EatToghter(null,null);
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
delegate void EatDelegate(String food);
class Man
{
private string name;
public Man(string name)
{
this.name = name;
}
public void Eat(string food)
{
Console.WriteLine(name+"吃"+food);
}
}
/*委托作为方法的参数进行传递*/
class Party
{
/// <summary>
/// 委托作为参数进行传递
/// </summary>
/// <param name="food">吃的东西</param>
/// <param name="values">可变的委托参数</param>
static void EatToghter(String food, params EatDelegate[] values)
{
if (values==null)
{
Console.WriteLine("座谈会结束");
}
else
{
EatDelegate eatChain = null;
foreach (EatDelegate eat in values)
eatChain += eat;
eatChain(food);
Console.WriteLine();
}
}
[STAThread]
static void Main(string[] args)
{
Man zsObj = new Man("张三");
Man lsObj = new Man("李四");
Man wwObj = new Man("王五");
EatDelegate zs = new EatDelegate(zsObj.Eat);
EatDelegate ls = new EatDelegate(lsObj.Eat);
EatDelegate ww = new EatDelegate(wwObj.Eat);
//委托链
EatDelegate eatChain=zs+ls+ww;
Console.WriteLine("张三,李四,王五开座谈会.");
//调用委托作为参数的方法
EatToghter("西瓜",zs,ls,ww);
Console.WriteLine("李四出去接电话.");
//没有传递李四的委托
EatToghter("香蕉", zs, ww);
Console.WriteLine("李四回来了.");
//三个人继续吃香蕉
EatToghter("香蕉", zs, ls, ww);
EatToghter(null,null);
}
}
}