具体方法:
- 定义事件
- 委托定义:
public delegate void EventFountion(Param param); - 事件定义:
public event EventFountion eventFountion; - 调用事件:
if (eventFountion!= null) eventFountion(this.param);
- 委托定义:
- 使用事件
- 事件触发后的方法
public void a_eventFountion(Param param){
...
} - 注册事件
ClassA a=new ClassA();
a.eventFountion+=new ClassA.EventFountion(a_eventFountion);
- 事件触发后的方法
实例代码:
- 自定义事件
class ClassA{
//委托定义:
public delegate void EventFountion(Param param);
//事件定义:
public event EventFountion eventFountion;
//调用事件:
public void init(){
if (eventFountion!= null) eventFountion(this.param);
...
}
...
} - 注册事件
class ClassB{
//调用事件:
public void fountion(){
ClassA a=new ClassA();
a.eventFountion+=new ClassA.EventFountion(a_eventFountion);
}
public void a_eventFountion(Param param){
....
}
...
}
————————————————————————————————————————————————
C#中事件允许一个对象将发生的事件通知其他对象,将发生的事件的事件源叫发行者,通知其他的对象叫订阅者,但是订阅者可以定义也可以不定义(事件发生者也可以是时间的订阅者)
定义事件的步骤:
1.定义事件(event关键字)
2.订阅事件
3.触发事件
下面是一个实例的应用
using System;
using System.Collections.Generic;
using System.Text;
namespace Person
{
class User
{
/// <summary>
/// 定义一个委托
/// </summary>
public delegate void DelegateLogin();
/// <summary>
/// 定义一个事件(事件用关键字加委托名来定的且后面无括号)
/// </summary>
public event DelegateLogin EventLogin;
/// <summary>
/// 类的字段和属性
/// </summary>
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private string password;
public string Password
{
get { return password; }
set { password = value; }
}
/// <summary>
/// 类的方法(可做为方法的参数即委托)
/// </summary>
public void Login()
{
Console.WriteLine("正在登陆中.....");
//引发事件
if(EventLogin!=null)
{
EventLogin();
}
}
}
}
//
using System;
using System.Collections.Generic;
using System.Text;
namespace Person
{
class EventExample
{
static void Main()
{
User user = new User();
user.Name = "小刚";
user.Password = "123456";
//订阅事件
user.EventLogin += new User.DelegateLogin(user_EventLogin);
//引发事件
user.Login();
}
static void user_EventLogin()
{
Console.WriteLine("登陆成功");
}
}
}