C#入门面向对象编程(委托的使用)
委托的概念
一、了解委托(delegate)
1、委托是一种全新的面向对象语言特性,运行在.NET平台
2、基于委托,开发事件驱动程序变得非常简单
3、使用委托可以大大简化多线程的难度
二、理解委托
1、委托,也可以看成是一种数据类型,可以定义变量,但是它是一种特殊的变量
2、委托定义的变量能接收的数值只能是一个方法(函数),可以理解成委托就是一个方法(函数)的指针(存储方法的变量)
方法1
方法调用---->委托对象----> 方法2
方法3
委托的使用
【1】声明委托(定义一个函数的原型:返回值+参数类型和个数)注意:委托的声明要定义在类的外面
public delegate int CalculatorDelegate(int a,int b);
【2】根据委托定义一个“具体方法”实现加法功能(写在类里面)
static int Add(int a,int b)
{
return a+b;
}
【2】根据委托定义一个“具体方法”实现减法功能(写在类里面)
static int Sub(int a,int b)
{
return a-b;
}
【3】创建委托对象,关联“具体方法”
CalculatorDelegate objCal=new CalculatorDelegate(Add);
【4】通过委托调用方法(而不是直接使用方法)
int result=objCal(10,20);
【5】委托对象所关联的方法可以动态的变化
objCal-=Add;//将委托变量所代表的具体方法“解绑”
objCal+=Sub;//重新指向一个新的方法
委托的应用
一、从窗体到主窗体的通信
主窗体:FrmMain.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DelegateApp
{
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
FrmOther objFrmOther = new FrmOther();
//[4]将从窗体委托对象属性和主窗体委托方法关联
objFrmOther.msgsender = this.Receiver;
objFrmOther.Show();
}
//[2]根据委托构建方法
private void Receiver(string content)
{
this.lblCount.Text = content;
}
private void FrmMain_Load(object sender, EventArgs e)
{
}
}
//[1]声明委托
public delegate void ShowCountDelegate(string content);
}
从窗体:FrmOther
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DelegateApp
{
public partial class FrmOther : Form
{
public FrmOther()
{
InitializeComponent();
}
//[3]根据委托创建对象
public ShowCountDelegate msgsender;
private int content = 0;
private void btnClick_Click(object sender, EventArgs e)
{
content++;
if (msgsender!=null){
msgsender(content.ToString());//[5]调用
}
}
private void FrmOther_Load(object sender, EventArgs e)
{
}
}
}
二、主窗体到从窗体的通信
主窗体:FrmMain.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DelegateApp2
{
public partial class FrmMain : Form
{
//[3]创建委托对象
public ShowCountDelegate objShowCountDelegate;
public FrmMain()
{
InitializeComponent();
FrmOther1 objFrmOther1 = new FrmOther1();
FrmOther2 objFrmOther2 = new FrmOther2();
FrmOther3 objFrmOther3 = new FrmOther3();
//[4]委托对象关联从窗体方法
objShowCountDelegate += objFrmOther1.Receiver;
objShowCountDelegate += objFrmOther2.Receiver;
objShowCountDelegate += objFrmOther3.Receiver;
objFrmOther1.Show();
objFrmOther2.Show();
objFrmOther3.Show();
}
private int count = 0;
private void btnClick_Click(object sender, EventArgs e)
{
count++;
objShowCountDelegate.Invoke(count.ToString());//[5]利用委托调用方法
}
private void btnReset_Click(object sender, EventArgs e)
{
count = 0;
objShowCountDelegate.Invoke("0");
}
}
//[1]声明委托
public delegate void ShowCountDelegate(string count);
}
从窗体
FrmOther1
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DelegateApp2
{
public partial class FrmOther1 : Form
{
public FrmOther1()
{
InitializeComponent();
}
//[2]根据委托创建方法
public void Receiver(string count)
{
this.lblCount.Text = count;
}
private void lblCount_Click(object sender, EventArgs e)
{
}
}
}
FrmOther2
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DelegateApp2
{
public partial class FrmOther2 : Form
{
public FrmOther2()
{
InitializeComponent();
}
//[2]根据委托创建方法
public void Receiver(string count)
{
this.lblCount.Text = count;
}
private void FrmOther2_Load(object sender, EventArgs e)
{
}
}
}
FrmOther3
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DelegateApp2
{
public partial class FrmOther3 : Form
{
public FrmOther3()
{
InitializeComponent();
}
//[2]根据委托创建方法
public void Receiver(string count)
{
this.lblCount.Text = count;
}
private void FrmOther3_Load(object sender, EventArgs e)
{
}
}
}
总结:多窗体通信个人理解:哪个窗体接受消息,委托方法就写在那里。然后另一个窗体通过委托调用这个方法。
转载于:https://www.cnblogs.com/cuig/p/8880075.html
C#入门面向对象编程(委托的使用)相关推荐
- 面向对象编程思想及入门知识
这几天在调程序,所以想写写自己对"面向对象编程"的一些理解,希望对打算入门计算机编程的同志们有所帮助.之前,好几个师弟问过我,C++与C有什么区别,学习面向对象语言需要掌握哪些基础 ...
- Python|装饰器|执行时间|递归|动态属性|静态方法和类|继承和多态|isinstance类型判断|溢出|“魔法”方法|语言基础50课:学习记录(6)-函数的高级应用、面向对象编程、进阶及应用
文章目录 系列目录 原项目地址: 第16课:函数的高级应用 装饰器(记录执行时间的例子) 递归调用 简单的总结 第17课:面向对象编程入门 类和对象 定义类 创建和使用对象 初始化方法 打印对象 面向 ...
- python入门:正则表达式,面向对象编程,零基础视频教程分享
正则表达式 import re #首先必须import re模块,re=Regular Expression,就是正则表达式的意思. pattern=re.compile(r'hello') #指明你 ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
2019独角兽企业重金招聘Python工程师标准>>> 什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能 ...
- php是不是面向对象编程,PHP面向对象编程入门
1.常用术语说明 class 类 object 对象 new 实例化 member 类成员 method 方法,成员函数 property 属性,成员变量 constant 类常量 2.类的构造 cl ...
- python 类和对象_Python零基础入门学习33:类与面向对象编程:类的继承
注:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性. 本文字数约1300,阅读时间约为3分钟. Python面向对象编程 类的继承机制 如果一个类A继承自另一个类B,就把继承者类A称 ...
- Java面向对象编程入门练习:Manager类继承Employee类并实现求得员工平均业绩
Java面向对象编程入门练习:Manager类继承Employee类并实现求得员工平均业绩 请定义一个Manager类,该类继承Employee类,并定义两个变量及一个构造方法,两个变量:depart ...
- python快速入门【五】---- 面向对象编程、python类
python入门合集: python快速入门[一]-----基础语法 python快速入门[二]----常见的数据结构 python快速入门[三]-----For 循环.While 循环 python ...
- 【手把手教你】Python面向对象编程入门及股票数据管理应用实例
1 前言 一般而言,在学习或练习python的初级阶段,在Jupyter Notebook(spyder或pycharm)上进行逐条执行语句和代码,这样可以起到交互的良好效果.但是如果要进行大一点的项 ...
最新文章
- M1芯片成功运行Linux,终端一行代码启动安装,也能一键删除卸载
- 在思科路由器上做 _限速
- 软件项目管理四个核心价值观
- php size(),PHP filesize() 函数
- 一个U盘走天下,装机大神撩妹的不二之选
- 文本检查点web_reg_find和web_find两个函数的区别
- linux 环境变量和shell变量
- python如何获得列表中某个元素的index
- BOSS直聘数据采集、解析处理、分析与可视化实战
- 【OWASP TOP10】2021全球十大常见安全漏洞
- html5摄像头手势识别,基于OpenCV的摄像头动态手势轨迹识别及其应用
- 面试秘籍大放送,编测编学独家秘籍遭外泄?!
- 易基因|手把手教你做全基因组DNA甲基化测序分析
- 【环信IM集成指南】Web端常见问题整理
- UML正日薄西山的13个理由
- C++使用Clipper库
- edge浏览器如何把网页放到桌面_如何在桌面创建Win10 Edge浏览器快捷方式
- 【题解】CQ大神原创的一道题
- 应届毕业生找Python工作遇到的难题,刚毕业没有工作经验该怎么办?
- VSP编译工具链安装
热门文章
- java设计模式之九外观模式(Facade)
- 《LeetCode力扣练习》剑指 Offer 10- I. 斐波那契数列 Java
- 寄存器和存储器的区别_寄存器、累加器、暂存器都是什么?它们有什么区别?...
- java 分权分域什么意思_什么是分权分域管理?为什么要应用分权分域技术?
- mysql 创建date,在MySQL中从DATE和TIME创建DATETIME?
- sqlalchemy exists 子查询_学好ORM框架SQLAlchemy面试必问
- python 模拟用户点击浏览器_Python-模拟浏览器-下载文献
- python删除类方法_python中向类中动态添加新特性及删除属性方法
- linux ext4 img解包打包教程,解打包.img.ext4(转)
- 3.MOC文件解读(下)——MOC文件中的函数