-
C#教程之c# 委托和事件实例学习
Common.cs:
using System;
using System.Collections.Generic;
using System.Text;
namespace DelegateAndEvent.App_Code
{
public class Common
{
//定义全局变量.
public static string txt = "";
#region 定义方法
public string HelloCSharp(string name)
{
txt += "hello " + name;//这样做是为了看到委托可以执行多个方法.
return "hello " + name;
}
public string HiCSharp(string name)
{
txt += "hi " + name;
return "hi " + name;
}
#endregion
#region 定义委托
//定义委托和定义方法类似,区别是加个delegate.去掉方法体,只写方法签名.
public delegate string SayHi(string name);
//委托可以像普通变量一样使用.区别在于可以把多个方法赋给委托.
public SayHi dlgt1, dlgt2;
//使用委托
public void useDelegate(string name, SayHi sayHi)
{
sayHi(name);
}
#endregion
#region 事件
//声明事件
public event SayHi hiEvent;
//触发事件
public void causeEvent()
{
hiEvent += HelloCSharp;
hiEvent += HiCSharp;
if (hiEvent != null)
{
hiEvent("crane");
}
}
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace DelegateAndEvent.App_Code
{
public class Common
{
//定义全局变量.
public static string txt = "";
#region 定义方法
public string HelloCSharp(string name)
{
txt += "hello " + name;//这样做是为了看到委托可以执行多个方法.
return "hello " + name;
}
public string HiCSharp(string name)
{
txt += "hi " + name;
return "hi " + name;
}
#endregion
#region 定义委托
//定义委托和定义方法类似,区别是加个delegate.去掉方法体,只写方法签名.
public delegate string SayHi(string name);
//委托可以像普通变量一样使用.区别在于可以把多个方法赋给委托.
public SayHi dlgt1, dlgt2;
//使用委托
public void useDelegate(string name, SayHi sayHi)
{
sayHi(name);
}
#endregion
#region 事件
//声明事件
public event SayHi hiEvent;
//触发事件
public void causeEvent()
{
hiEvent += HelloCSharp;
hiEvent += HiCSharp;
if (hiEvent != null)
{
hiEvent("crane");
}
}
#endregion
}
}
MainFrm.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DelegateAndEvent.App_Code;
namespace DelegateAndEvent
{
public partial class MainFrm : Form
{
Common common = new Common();
public MainFrm()
{
InitializeComponent();
}
private void btnOk_Click(object sender, EventArgs e)
{
//this.lblShow.Text += common.HelloCSharp("tree");
//测试委托
common.dlgt1 = common.HelloCSharp;//只写方法签名,不加()
common.dlgt1 += common.HiCSharp;//虽然两个方法都调用了,但是返回值只返回最后一次调用的值.
//this.lblShow.Text += common.dlgt1("tree");//使用委托就像使用方法一样.
//this.lblShow.Text = Common.txt;
//用委托做参数
//common.useDelegate("tree", common.dlgt1);
//this.lblShow.Text = Common.txt;
//事件
/*这里的问题是不能用common.hiEvent();这样引用.
原因是需要在这个类里定义一个事件变量.
*/
common.causeEvent();
this.lblShow.Text = Common.txt;
}
}
}
复制代码 代码如下:
using System;
using System.Collections.Generic;
using System.Text;
namespace DelegateAndEvent.App_Code
{
public class Common
{
//定义全局变量.
public static string txt = "";
#region 定义方法
public string HelloCSharp(string name)
{
txt += "hello " + name;//这样做是为了看到委托可以执行多个方法.
return "hello " + name;
}
public string HiCSharp(string name)
{
txt += "hi " + name;
return "hi " + name;
}
#endregion
#region 定义委托
//定义委托和定义方法类似,区别是加个delegate.去掉方法体,只写方法签名.
public delegate string SayHi(string name);
//委托可以像普通变量一样使用.区别在于可以把多个方法赋给委托.
public SayHi dlgt1, dlgt2;
//使用委托
public void useDelegate(string name, SayHi sayHi)
{
sayHi(name);
}
#endregion
#region 事件
//声明事件
public event SayHi hiEvent;
//触发事件
public void causeEvent()
{
hiEvent += HelloCSharp;
hiEvent += HiCSharp;
if (hiEvent != null)
{
hiEvent("crane");
}
}
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace DelegateAndEvent.App_Code
{
public class Common
{
//定义全局变量.
public static string txt = "";
#region 定义方法
public string HelloCSharp(string name)
{
txt += "hello " + name;//这样做是为了看到委托可以执行多个方法.
return "hello " + name;
}
public string HiCSharp(string name)
{
txt += "hi " + name;
return "hi " + name;
}
#endregion
#region 定义委托
//定义委托和定义方法类似,区别是加个delegate.去掉方法体,只写方法签名.
public delegate string SayHi(string name);
//委托可以像普通变量一样使用.区别在于可以把多个方法赋给委托.
public SayHi dlgt1, dlgt2;
//使用委托
public void useDelegate(string name, SayHi sayHi)
{
sayHi(name);
}
#endregion
#region 事件
//声明事件
public event SayHi hiEvent;
//触发事件
public void causeEvent()
{
hiEvent += HelloCSharp;
hiEvent += HiCSharp;
if (hiEvent != null)
{
hiEvent("crane");
}
}
#endregion
}
}
MainFrm.cs:
复制代码 代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DelegateAndEvent.App_Code;
namespace DelegateAndEvent
{
public partial class MainFrm : Form
{
Common common = new Common();
public MainFrm()
{
InitializeComponent();
}
private void btnOk_Click(object sender, EventArgs e)
{
//this.lblShow.Text += common.HelloCSharp("tree");
//测试委托
common.dlgt1 = common.HelloCSharp;//只写方法签名,不加()
common.dlgt1 += common.HiCSharp;//虽然两个方法都调用了,但是返回值只返回最后一次调用的值.
//this.lblShow.Text += common.dlgt1("tree");//使用委托就像使用方法一样.
//this.lblShow.Text = Common.txt;
//用委托做参数
//common.useDelegate("tree", common.dlgt1);
//this.lblShow.Text = Common.txt;
//事件
/*这里的问题是不能用common.hiEvent();这样引用.
原因是需要在这个类里定义一个事件变量.
*/
common.causeEvent();
this.lblShow.Text = Common.txt;
}
}
}
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
JavaScript判断两个数组相等的四类方法
js如何操作video标签
React实战--利用甘特图和看板,强化Paas平
【记录】正则替换的偏方
前端下载 Blob 类型整理
抽象语法树AST必知必会
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程