C#委托零基础理解

C#委托零基础理解(转)

1,  为什么使用委托  2.什么是委托  3.委托如何使用

为什么使用委托?

委托是c#中非常重要的一个概念,使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的。

什么是委托?

委托是一种引用方法的类型,一旦为委托分配了方法,委托将与该方法具有相同的行为,委托方法的使用和其他方法一样,具有参数和返回值。

如何使用委托

下面咱们就抛开枯燥的概念,来看几个活生生的例子是怎么使用委托的吧!

案例1:中国人和英国人问好

分析:1.首先我们需要编写一个中国人问好的方法和一个英国人问好的方法。

2.编写一个Greet方法,将问好方法作为一个参数,实现各个国家人的问好方法。

3.使用委托实现各个国家人的问好功能

使用委托分为三个步骤:1,定义委托  2.声明委托变量  3.使用委托

// 1.定义委托

public delegate void GreetDelegate(string name);

class Program

{

static void Main(string[] args)

{

//2.声明委托变量

GreetDelegate dDelegate = new GreetDelegate(ChineseGreeting);

//3.使用委托

dDelegate("李小龙");

Console.ReadKey();

}

//中国人问好方法

public static void ChineseGreeting(string name)

{

Console.WriteLine("早上好!" + name);

}

//英国人问好方法

public static void EnglishGreeting(string name)

{

Console.WriteLine("Morning!" + name);

}

public static void Greet(string name, GreetDelegate makeGreet)

{

makeGreet(name);

}

}

为了加深大家对委托的理解,我们再来写一个相似的例子。

案例2:翻译案例:通过委托将英文翻译为中文和韩文

//01.声明一个委托类

public delegate void MyTransDelegate(string words);

class Program

{

static void Main(string[] args)

{

//翻译方法

//调用方法一

//2.声明委托

MyTransDelegate del=new MyTransDelegate(TransToCN);

//3.调用委托

del("aa");

//调用方法二

Translate("aa",TransToCN);

//调用方式三

//MyTransDelegate del = TransToCN;

//del("aa");

Console.ReadKey();

}

static  void Translate(string str,MyTransDelegate del)

{

del(str);

}

static void TransToCN(string str)

{

Console.WriteLine("翻译成中文了!");

}

static void TransToKorean(string str)

{

Console.WriteLine("翻译成韩语了!");

}

}

通过这个案例,我们可以看出使用委托的方法不止一种,无论使用哪种方式,最终都和方式一一样。通过反编译我们可以证明:

如下图示我通过反编译看到方法二的代码:

如下是反编译后方法三的代码

有了上述知识存储,我们再来看一个案例:

案例3:通过委托将子窗体中的值传递到父窗体中

如图有父窗体和子窗体两个窗体,现在我想实现当点击父窗体中按钮时弹出子窗体(当然这个超级简单),在弹出子窗体后,在子窗体的文本框中输入内容,点击关闭按钮后子窗体关闭,并且将子窗体中输入的内容在父窗体的文本框中显示。

子窗体中代码如下:

//定义委托

public delegate void Words(string words);

//声明委托变量

public Words words;

private void button1_Click(object sender, EventArgs e)

{

words(txtchild.Text);

this.Close();

}

父窗体中的代码:

private void btnOpen_Click(object sender, EventArgs e)

{

Child child = new Child();

child.words = GetWords;

child.Show();

}

public void GetWords(string str)

{

txtMain.Text = str;

}

我们来分析下上述两断代码:

首先,我们想在子窗体关闭时,更新父窗体文本框中的数据。但是我们非常清楚的知道,窗体之间的空间是不能直接相互访问的,这时我们就要找一个中介帮我们实现父窗体数据的更新功能。于是我们定义了带一个参数没有返回值的委托Words,并且在父窗体中定义了一个方法GetWords符合委托的条件。于此同时,在子窗体中声明了一个委托变量words,并且在关闭按钮中,调用了委托变量。

但在子窗体中我们没有对子窗体委托变量赋值,真正的赋值放到了主窗体中。这样通过委托就实现了在子窗体中调用父窗体的方法,进而实现了父窗体文本框内容的更新。

不知道,看过上述3个案例,大家对委托有没有一个相对清晰的认识,如果本文能帮助迷途中的你,那就更好了。

时间: 2024-11-05 16:22:43

C#委托零基础理解的相关文章

零基础理解Binder

写在前面的 当一个Android App存在某个不需要UI的后台运行需求时,或者是因为内存占用需要采用多进程方案时,我们免不了与多进程打交道.必不可少的,需要考虑Binder在其中如何实现. 最常见的Binder实现当然是AIDL,然而Binder的实现绝不仅仅只有AIDL一种方式,如果止步于写.aidl,那么对于Binder,对于Android整体的跨进程传输过程的理解都只能流于形式. 但是想理解Binder不是一件容易的事情,Binder的概念涉及太多知识点,遍观各大论坛上关于Binder的

.NET零基础入门05:委托与事件

一:前言 本小节,我们需要停一停我们的小游戏开发,虽然它现在还不完美,还很简单,甚至还有BUG.但是,为了更好的理解C#,现在到了该深入了解一些基础知识的时候了. 当然,实际上,本小节内容对于零基础入门的初学者来说,还是有点难了.委托与事件,如果只是泛泛的说一下,可能就是一两句话.但是,我们的课程要遵循一个原则:知其然,知其所以然.所以,本小节的内容实际上有点多,但是我希望大家细细品味,争取彻底消化委托和事件这两个概念. 同时,本课程还要教会大家使用一个工具,分析代码. 二:委托的现实场景:卖家

C++动态内存管理好难怎么办?零基础图文讲解,小白轻松理解原理

首先我们先了解一下内存: C语言使用malloc/free动态管理内存空间,C++引入了new/delete,new[]/delete[]来动态管理内存.如果大家在自学C++中遇到困难,想找一个学习C++的环境,可以加入我的C++学习交流扣群先是513801371,能够共同学习交流和分享!![](https://s1.51cto.com/images/blog/201905/11/f3795621980960d47c291497e516b846.jpg?x-oss-process=image/w

零基础到CS开发高手通用权限管理系统全程实录

零基础到CS开发高手通用权限管理系统全程实录(Devexpress.FastReport.NET.WebService.智能客户端)课程讲师:闲筝课程分类:.NET框架适合人群:中级课时数量:70课时更新程度:80%用到技术:Devexpress.FastReport.NET.WebService.智能客户端涉及项目:通权系统.智能客户端.报表设计器咨询qq:1840215592 详细介绍:http://www.ibeifeng.com/goods-493.html项目主要功能模块:闲筝老师的.

Yaf零基础学习总结3-Hello Yaf

Yaf零基础学习总结3-Hello Yaf 上一次我们已经学习了如何安装yaf了,准备工作做好了之后我们来开始实际的编码了,码农都知道一个经典的语句就是“Hello World”了,今天我们开始入手Yaf,目标只要能得到“Hello Yaf”就可以了,不多说,下面开始了.(注:需要读者有一定的MVC知识基础,最好用过一些其他简单的框架) 1.组织目录结构 对于使用过框架的来说这点很好理解,对于没使用过框架的来说建议先别在这死磕,先记着吧,简单点就是对于我们的文件结构做一些规定,让自己和别人都能看

零基础学习软件测试从懵逼到吊炸天之基础与进阶篇

本专题是集中了多部单个课程而来,主要针对在校学生.毕业生.想进入测试行业的零基础童鞋和初级测试工程师而定制. 专题中的内容从基础理论到后续的技术点都包括了,后续还会不断更新,购买者均可免费观看! 专题中的课程内容以企业应用为主,尽量减少大学课本上的死板概念.当然,对于毫无基础的童鞋来说学习一门新技术,内心必然是拒绝的,可能也会感到懵逼,没有关系,很多知识是先要记下来背下来,然后再后续的实践中慢慢理解,和你开车一个道理. 地址:http://edu.51cto.com/topic/1195.htm

黑马程序员:从零基础到精通的前端学习路线

随着互联网的深入发展,前端开发工程师一跃成为市场上非常抢手的人才.很多同学,包括以前做UI的.Java的.或者对于IT完全零基础的同学都想学习前端.下图是网上流传甚广的一张前端学习思维导图,很多初学者表示看到这些密密麻麻的知识点就已经晕了.确实,前端是一门涵盖面很广的学科.但是想学前端的你也不用慌张,内容虽多但有迹可循,只要循序渐进就不怕学不好前端! 那么前端开发到底需要学什么?应该怎么学?接下来黑马程序员前端学院教你如何从零基础学习前端. 一.前端开发入门 在入门阶段,你首先要学会最基本的技能

零基础全面学习HTML

基础框架 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>标题标签</title> </head> <body> <h1>了不起的盖茨比</h1> <p><了不起的盖茨比

零基础学编程:你可以的!

好多人都在担心零基础能学编程吗?可以学会.学好吗? 我的回答是:可以.零基础可以学会编程,但你在学习前应该明白两点,或者说你应该做的有两点:一是你要找个好的平台,二是自己要下定决心,要坚持下去. 好的平台指的就是培训机构.找一个好的培训机构,找一批教学经验丰富的老师,可以让你达到事半功倍的效果. 尚学堂有一批优秀的老师,从技术到生活,从专业思想逻辑到追求,指导每位学员,零基础入学到专业人士并非遥不可及.     我是在尚学堂学习的,这里的老师教学经验都很丰富,都有过项目开发经验,老师也都很负责,