H5W3
当前位置:H5W3 > 问答 > 正文

初学,实例求解指导

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);
      }
}

未经允许不得转载:H5W3 » 初学,实例求解指导

赞 (0)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址