[C#] C#的委托

C#中的委托是通过继承System.Delegate中的一个类来实现的。

具体的步骤:

1. 声明一个委托对象,其参数形式一定要和你想要包含的方法的参数形式一致。
2. 定义所有你要定义的方法,其参数形式和第一步中声明的委托对象的参数形式必须相同。
3. 创建委托对象并将所希望的方法包含在该委托对象中。
4. 通过委托对象调用包含在其中的各个方法。


实现委托机制的C#代码:
None.gif using  System;
None.gif
None.gif
// 步骤1: 声明一个委托对象
None.gif
public   delegate   void  MyDelegate( string  input);
None.gif
None.gif
// 步骤2::定义各个方法,其参数形式和步骤1中声明的委托对象的必须相同
ExpandedBlockStart.gifContractedBlock.gif
class  MyClass1 dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public void delegateMethod1(string input)dot.gif{
InBlock.gif        Console.WriteLine(
"This is delegateMethod1 and the input to the method is {0}",input);
ExpandedSubBlockEnd.gif    }

ExpandedSubBlockStart.gifContractedSubBlock.gif    
public void delegateMethod2(string input)dot.gif{
InBlock.gif        Console.WriteLine(
"This is delegateMethod2 and the input to the method is {0}",input);
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
None.gif
// 步骤3:创建一个委托对象并将上面的方法包含其中
ExpandedBlockStart.gifContractedBlock.gif
class  MyClass2 dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public MyDelegate createDelegate()dot.gif{
InBlock.gif        MyClass1 c2
=new MyClass1();
InBlock.gif        MyDelegate d1 
= new MyDelegate(c2.delegateMethod1);
InBlock.gif        MyDelegate d2 
= new MyDelegate(c2.delegateMethod2);
InBlock.gif        MyDelegate d3 
= d1 + d2;
InBlock.gif        
return d3;
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
None.gif
// 步骤4:通过委托对象调用包含在其中的方法
ExpandedBlockStart.gifContractedBlock.gif
class  MyClass3 dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public void callDelegate(MyDelegate d,string input)dot.gif{
InBlock.gif        d(input);
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
ExpandedBlockStart.gifContractedBlock.gif
class  Driver dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif    
static void Main(string[] args)dot.gif{
InBlock.gif        MyClass2 c2 
= new MyClass2();
InBlock.gif        MyDelegate d 
= c2.createDelegate();
InBlock.gif        MyClass3 c3 
= new MyClass3();
InBlock.gif        c3.callDelegate(d,
"Calling the delegate");
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值