c#的委托代码示例

本文详细介绍了 C# 中的委托概念,包括单播委托和多播委托的定义及使用方式,并通过示例代码展示了如何实现静态绑定与动态绑定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<script type="text/javascript">google_ad_client = "pub-2048279401139630";google_ad_slot = "8856771542";google_ad_width = 728;google_ad_height = 90;document.write("<s"+"cript type='text/javascript' s"+"rc='http://pagead2.googlesyndication.com/pagead/show_ads"+"."+"js'></scr"+"ipt>");</script>

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();            
                
        }
    }
    
}

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值