C# 委托的理解

C# 委托的理解

题记:

学好一门技术语言,其实不难。首先心理上要克服畏惧的不良的情绪,在意志品质上要提高克服困难的勇气。其次,要循序渐进,逐个梳理概念上的难点。最后,就是多看手册,多练习。

因为最近手头上有个C# 的项目工程,为了搞清楚里面的内容,不得不从来来回顾下C#的语言特点以及C#开发windows程序的技术要点。今天的主题是 委托

简介

首先了解下委托的概念:

委托是C# 语言的特性。它提供类似C++语言中函数指针的功能。那委托与C++中指针函数的异同有哪些呢?这我们留到后一篇再讲解。

C#里面有两种类型的数据结构,一个是值类型,另一个是引用类型。

委托是引用类型。 可以利用委托在执行时传入方法的名称,从而动态决定想调用的方法。

委托衍生出两个方面的技术要点:一是callBack(回调), 其二是事件处理

初步了解了C#委托的概念要点,接着我们通过实例来说明。

委托的使用过程

委托的使用过程为3步:定义(声明)、实例化和调用。

1、定义(声明)
通过关键字delegate 进行,并同时指定返回类型(可是是void)和带参数的(可以为空),如:

delegate int ZDelegate();

delegate void MDelegate(uint i);

2、实例化

委托的实例化通过关键字new 进行,并同时指定所引用的方法,而且方法的参数列表和返回类型都应与委托相一致。如:

MDelegate md = MDelegate(card.Deposit);

3、调用

项调用方法一项来调用委托,只不过此时无需指出方法所属的对象或类。

md(100);

我们来看一个完整的实例:

namespace mydemo
{
   
    delegate int Converter(int x);  //定义一个委托

    class Test
    {
        static void Main()
        {
            Converter t = Square; // Create delegate instance 
            int result = t(3);    // Invoke delegate 
            Console.WriteLine(result); // 9 

            Console.ReadLine();
        }
        static int Square(int x) { return x * x; }
    }   
  
}

委托的多播:

多播委托(MulticastDelegate)提供了一种类似于流水线式的钩子机制,只要加载到这条流水线上的委托,都会被顺序执行。

因为所有的委托都继承自MulticastDelegate,因此所的委托都具备多播特性。

委托的多播可以通过 “+=” 或者 “-=”来实现。

“+=” :添加方法

“-=”:去挑方法。

来看下面的一个例子:

namespace mydemo
{
   
    delegate void Converter(int x);  //定义一个委托

    class Test
    {
        static void Main()
        {
            Converter t = new Converter(Square); // Create delegate instance 
            t(3);    // Invoke delegate 
           

            Converter m = new Converter(Square);
            m += new Converter(multi);
            m(3);
            

            Console.ReadLine();
        }
        static void Square(int x) { 
            
            Console.WriteLine( x * x); }

        static void multi(int x) { 
            Console.WriteLine (x * 10);}
    }   
  
}

输出的是
9
9
30

上述的例子中 第一个委托实例调用的是t(3),执行的是方法Square(3)中的内容,
第二个委托实例调用的是m3,执行的是按顺序的方法Square(3),multi(3)中的内容。

委托的内容,就这些,不难理解,你同意吗?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值