委托和事件

一、委托与事件的区别

委托是一种用于存储方法引用的引用类型,它定义了一种类型安全的调用回调方法的方式。
事件使用委托来封装触发时将要调用的方法,事件是一种函数成员。

委托是指向一个方法的指针,而且我们采取和调用方法一样的方式来调用它。调用一个委托时,”运行时“实际执行的是委托所引用的方法。可以动态的更改一个委托所引用的方法,事调用一个委托的代码每次都运行一个不同的方法。委托的优势是能引用多个方法。

二、建立委托和事件

1.C#使用关键字delegate来声明委托,声明的形式如下:
【特性】【修饰符】delegate【返回类型】【委托名】(【形式化参数列表】);
【特性】【修饰符】可选,delegate【返回类型】【委托名】必选。

  • 委托的修饰符包括new和访问修饰符(public 、protected、nternal和private)。new修饰符用来隐藏从基类继承而来的同名委托。public 、protected、nternal和private修饰符控制委托类型的可访问性。
  • 委托名一般采用第一个字母大写的名词,多名词组合每个名词的首字母大写。
  • 可选的【形式化参数列表】用来指定委托的参数,而【返回类型】则指定委托的返回类型,一个与委托兼容的方法必须满足一下两个条件:具有相同的参数数目、顺序相同、参数修饰符相同和返回类型相同(即与委托签名一致)。
  • 大多数委托要被重用,一般定义在于类平级,且用public修饰,如果定义在类的内部,则必须通过调用该类的成员才能取得委托的引用,频繁调用的情况下不合适
 public delegate void PassResultHandler(object sender, string result, int paud_rate);
 private void PassResult(object sender, string e, int paud_rate)
 {
 }
 //例如这样,方法和委托兼容

2.声明事件

event delegatetypename eventname           //delegatetypename委托类型名称      eventname事件名称

WPF实现关闭子窗口B时触发A窗口事件
在这里插入图片描述

1、定义子窗口B

发布器功能:

  //第一步,定义委托,委拖不属于任何一个类
  public delegate void ChangeTextHandler();
  public partial class B : Window   //事件发布类
{
    //第二步,声明事件
    public event ChangeTextHandler ChangeTextEvent;
    public B()
     {
        InitializeComponent();
     }
      //点击子窗口B上的一个按钮触发事件
     private void btnCalibraEnter_Click(object sender, RoutedEventArgs e)
      {
          this.Close();//关闭窗口B
          //第四步,调用事件
          ChangeTextEvent();
      }
}

2、定义窗口A,通过窗口A打开子窗口B,打开子窗口B后立即关闭窗口A
订阅器的功能:

public partial class A : Window
{
    public A()
    {
            InitializeComponent();
    }     
    //点击窗口A上的按钮,关闭窗口A,并注册事件
     private void btnNext_Click(object sender, RoutedEventArgs e)
        {
            this.Close();//关闭当前窗口
            //例化窗口B
            B demaWin = new B();
            demaWin.ChangeTextEvent += new B.ChangeTextHandler(method);//第三步,注册事件
            demaWin.Show();//打开窗口B 
        }
 
        //第五步,事件发生时要调用的方法
        private void method() 
        {
           //虽然当前窗口A已经关闭,但是事件触发时,程序依然可以执行到这里
        }   
}


原文参考:https://blog.csdn.net/kenjianqi1647/article/details/84134731

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值