using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _5_8
{
public class EventTest
{
private int value;
public delegate void NumManipulationHandler(); //定义委托NumManipulationHandler
public event NumManipulationHandler ChangeNum; //根据委托定义事件ChangeNum,当数字改变时触发
protected virtual void OnNumChanged() //定义虚方法OnNumChanged
{
if (ChangeNum != null)
{
ChangeNum();
}
else
{
Console.WriteLine("数字发生改变,事件被触发");
}
}
public EventTest(int n)
{
SetValue(n);
}
public void SetValue(int n)
{
if (value != n)
{
value = n;
OnNumChanged(); //数字变化,先赋值再调用OnNumChanged方法
}
}
}
public class MainClass
{
public static void Main()
{
EventTest e = new EventTest(1);
e.SetValue(2);
e.SetValue(3);
Console.ReadKey();
}
}
}
初学,单独委托调用实例看的明白,结合事件的实例没看懂,1、定义委托没跟参数,我怎么知道调用那个方法?
2、没明白事件怎么不是OnNumChanged?
请大侠们指点下
上面的事件没有被订阅,就不会被触发,而且OnNumChanged方法跟事件没有关系,只是个自定义的虚方法而已,不用它也可以
参考:https://www.cnblogs.com/zhangchenliang/archive/2012/08/08/2629048.html
简单示例
EventTest.cs
Program.cs