c#的委托代码示例

c#的委托其实是一个特殊的类,这个类是一个抽象的类,下面就是它在MSDN中的定义:

定义:

看来它从接口ICloneable, ISerializable继承而来,所以在使用委托的时候

主要分为三步

1。声明一个委托,比如是SomeDelegate,

2。生成委托 SomeDelegate的实例,将需要委托的方法作为参数传给委托

3。调用这个委托实例。

委托可以与静态绑定,也可以动态绑定,静态绑定是与一个类的静态方法绑定,动态绑定主要与一个类的实例中的方法进行绑定,注意红色部分的区别。

如果一个委托只能调用一个方法,那么这个委托就叫“单播委托”,否则就叫“多播委托”

多播委托的层次结构如下:

其定义如下:

看来多播是从单播继承而来,又进行了适当地扩展。

所以多播的使用跟单播的方法一样,同样需要三步。参看上面的三步。

下面给一个代码,里面给出了单播与多播的示例,同时演示了静态绑定与动态绑定

 

using  System;
namespace  DelegateNiu
{
    
delegate   string  SomeDelegate( string  someStringValue);
    
delegate   void  AnotherDelegate();    
    
class  SomeClass
    {
        
public   void  SomeMethod()
        {
            Console.WriteLine(
" SomeClass.SomeMethod 动态方法被调用... " );
        }  
        
// 定义一个方法,该方法主要是为了演示多播委托
         public   void  AnotherMetnod()
        {
            Console.WriteLine(
" SomeClass.AnotherMetnod 动态方法被调用... " );
        }
    }
    
//
     public   class  SomeApplication
    {
        
private   static   string  SomeMethod( string  someStringMethod)
        {
            Console.WriteLine(
" SomeApplication.SomeMethod 静态方法被调用   " + " 参数为[ " +  someStringMethod + " ].... " );
            
return   " [ " +  someStringMethod + " ] ... " ;
        }
        
public   static   void  Main( string [] args)
        {
            Console.WriteLine(
" 非静态方法的调用,同时也是多播的演示    " );
            
// 定义SomeClass的一个实例
            SomeClass someclass = new  SomeClass();
            AnotherDelegate anotherdelegate1
= new  AnotherDelegate(someclass.SomeMethod);
            AnotherDelegate anotherdelegate2
= new  AnotherDelegate(someclass.AnotherMetnod);
            
// AnotherDelegate anotherdelegate=anotherdelegate1+anotherdelegate2;
            AnotherDelegate anotherdelegate = (AnotherDelegate)Delegate.Combine(anotherdelegate1,anotherdelegate2);
                        
// 多播的联合可以使用“+”,也可以使用Combine方法,上面注释的一句与使用Combine方法的效果一样
            anotherdelegate();
            
// 开始静态方法的调用
            Console.WriteLine( " 静态方法的调用 " );
            SomeDelegate somedelegate
= new  SomeDelegate(SomeApplication.SomeMethod);
            somedelegate(
" 测试委托的静态方法的绑定 " );
            Console.ReadLine();            
                
        }
    }
    
}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值