博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
新手学委托之初识委托(一)
阅读量:6609 次
发布时间:2019-06-24

本文共 1788 字,大约阅读时间需要 5 分钟。

我也刚刚学委托,看了传智播客的一些视频做了一些笔记,有什么错误或者不严谨的地方请多多原谅啊!

什么是委托?

MSDN官网是这么说的:
委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。
这话说得很官方语,用最通俗易懂的话来讲,你就可以把委托看成是用来执行方法(函数)的一个东西。
为什么需要委托呢?
众所周知,C#是一名强类型的语言,委托就是用来约束它指向的函数的参数(下面会举例说来)。
委托有什么好处呢?
唉,语言表达不咋样,还是在例子中一同说吧。
委托类型声明的格式如下:

public delegate void TestDelegate(string message);

乍一看上去怎么这么变扭啊?这声明格式像定义了一个类,又像定义了一个方法。的确,委托就是相当于声明了一个类。MSDN官网中还有这么一句话:委托是事件的基础。这句又是神马意思呢?委托和事件有神马联系呢?(先不着急,先学会怎么使用最简单委托再说了)。

好了,说了这么多理论的东西,下面开始正式的委托学习吧!

例1:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 为什么委托{    //声明委托,这是的SampleDelegate是一个类    //委托就是约束指向的函数的参数,不能瞎指,因为C#是强类型语言     //其实也可以在其他类中声明,但最好还是与其他类保持平行关系    delegate int SampleDelegate(string s, int i2); class Program    {        static void Main(string[] args)        {            //将委托的变量指向与声明委托时一致的方法,不能写出some1(),这样就变成了调用。            //看看some1的方法与委托对比一下,除了加入了delegate关键字以外,其余的是不是完全一致呢?            SampleDelegate s1 = some1;            //标准写法,可以简写成上面的写法            SampleDelegate s2 = new SampleDelegate(some1);            if (DateTime.Now.Second%2==0)            {                s1 = some1;            }            else            {                s1 = some2;            }                        //因为SampleDelegate约束了参数的类型,所以才可以这么调用            //在这一刻程序员不知道指向哪个函数。            //但知道s1指向的函数格式一定是int SampleDelegate(string s, int i2)            //调用s1指向的函数            s1("hi", 5);            Console.ReadKey();        }                static int some1(string s, int i2)        {            //只输出了变量s            Console.WriteLine(s);            return 0;        }                static int some2(string s1, int i3)        {            //只输出了“有木有!”            Console.WriteLine("有木有!");            return i3 + 2;        }    }}

好了,还有委托的好处和委托与事件的联系下次再讲啊!

 

转载地址:http://aaiso.baihongyu.com/

你可能感兴趣的文章
ORA-02266: 表中的唯一/主键被启用的外键引用
查看>>
replace与replaceAll的区别
查看>>
Rabbitmq的调度策略
查看>>
Altium Designer部分快捷键和使用技巧
查看>>
Linux 版本 一览
查看>>
ORM
查看>>
【IAR警告】Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined
查看>>
获得表单文件的正文的二进制(环境vbs)
查看>>
【转】虚拟机检测技术
查看>>
struts标签bean:define
查看>>
asp.net mvc 处理”从客户端中检测到有潜在危险的 request.form 值。”
查看>>
精品素材:20个精美的免费Flash整站模板下载
查看>>
Mars之android的Handler(2)
查看>>
编程?事业?
查看>>
无论怎么样都不能成为你对别人发脾气的理由
查看>>
asp.net学习之ado.net(无连接模式中的DataAdapter)
查看>>
请问大家ndk中LOCAL_SHARED_LIBRARIES LOCAL_LDLIBS什么区别
查看>>
2013年成都邀请赛解题报告
查看>>
WEB中的cookie
查看>>
使用nodeitk进行对象识别
查看>>