首页 > 代码库 > delegate&event学习理解

delegate&event学习理解

一、  

//声明的委托 

public delegate void BoilerLogHandler(string status);

// 基于上面的委托定义事件
public event BoilerLogHandler BoilerEventLog;

//main方法

static void Main(string[] args)
{
  BoilerInfoLogger filelog = new BoilerInfoLogger(@"E:\\boiler.txt");
  DelegateBoilerEvent boilerEvent = new DelegateBoilerEvent();

  
  boilerEvent.BoilerEventLog += new DelegateBoilerEvent.BoilerLogHandler(Logger);  //Logger是委托的一个方法
  boilerEvent.BoilerEventLog += new DelegateBoilerEvent.BoilerLogHandler(filelog.Logger);  //filelog.Logger是委托的另一个方法;这条语句执行完后,委托有两个方法

  
  boilerEvent.LogProcess();
  Console.ReadLine();
  filelog.Close();
}

//定义的事件的用法

 BoilerEventLog(message);  //BoilerEventLog是事件名,参数是委托(BoilerLogHandler)的对应方法的参数,委托的方法是

               //BoilerInfoLogger.Logger和 RecordBoilerInfo.Logger

 

二、

  WPF中InotifyPropertyChanged 的成员,用于数据变化后及时通知前台的方法(OnPropertyChanged

  PropertyChanged是定义的事件名

 

//继承InotifyPropertyChanged 后,自动实现的PropertyChanged接口

#region

public event PropertyChangedEventHandler PropertyChanged;

private void OnPropertyChanged(string propertyName)
{

  //方式一和方式二的写法vs2015会提示可以简化代码,方式三就是简化后的代码


  //方式一:
  //PropertyChangedEventHandler handler = this.PropertyChanged;
  //if (handler != null)
  //{
    // handler(this, new PropertyChangedEventArgs(propertyName));
  //}

  //方式二:
  //if (PropertyChanged != null)
  //{
    // PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
  //}

  //方式三:
  this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

    //该条语句执行后,跳转到对应的方法去执行,例如:

    //void ModelPropertyChanged(object sender, PropertyChangedEventArgs e)

    //假设propertyName=‘IsPassed‘,则e.PropertyName=‘IsPassed‘

                                        
}

#endregion

 

delegate&event学习理解