请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

八酷博客 首页 技术分享 解决问题 查看内容

初学,实例求解指导

2020-11-17 23:02| 发布者: admin| 查看: 5| 评论: 0|原作者: herry507|来自: 博客园

摘要: 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
herry507

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

    public delegate void NumManipulationHandler(int num);
    public class EventTest
    {
        private int value;
        public event NumManipulationHandler ChangeNum; 

        public EventTest(int value)
        {
            this.value = value;
        }     

        public void ChangeValue(int num)
        {
            if(this.ChangeNum!=null && num!=this.value)
            {
                this.value = num;

                this.ChangeNum(num);
            }
        }
    }

Program.cs

class Program
{
      static void Main(string[] args)
      {
            EventTest test = new EventTest(1);

            test.ChangeNum += Test_ChangeNum;

            test.ChangeValue(2);
      }

      private static void Test_ChangeNum(int num)
      {
            Console.WriteLine("当前值="+num);
      }
}


E行者

多谢

herry507


文章点评