如何将事件添加到类中

时间:2008-09-17 16:39:25

标签: c# class events

假设我有一个名为Frog的类,它看起来像:

public class Frog
{
     public int Location { get; set; }
     public int JumpCount { get; set; }


     public void OnJump()
     {
         JumpCount++;
     }

}

我需要两件事的帮助:

  1. 我想在类定义中创建一个名为Jump的事件。
  2. 我想创建一个Frog类的实例,然后创建另一个在Frog跳转时调用的方法。

4 个答案:

答案 0 :(得分:56)

public event EventHandler Jump;
public void OnJump()
{
    EventHandler handler = Jump;
    if (null != handler) handler(this, EventArgs.Empty);
}

然后

Frog frog = new Frog();
frog.Jump += new EventHandler(yourMethod);

private void yourMethod(object s, EventArgs e)
{
     Console.WriteLine("Frog has Jumped!");
}

答案 1 :(得分:1)

@CQ:为什么要创建Jump的本地副本?此外,您可以通过稍微更改事件声明来保存后续测试:

public event EventHandler Jump = delegate { };

public void OnJump()
{
    Jump(this, EventArgs.Empty);
}

答案 2 :(得分:1)

这里是如何使用普通EventHandler或自定义委托的示例。请注意,使用?.代替.来确保如果事件为null,则事件将彻底失败(返回null)

public delegate void MyAwesomeEventHandler(int rawr);
public event MyAwesomeEventHandler AwesomeJump;

public event EventHandler Jump;

public void OnJump()
{
    AwesomeJump?.Invoke(42);
    Jump?.Invoke(this, EventArgs.Empty);
}

请注意,事件本身仅在没有订阅者的情况下才为null,并且一旦被调用,事件是线程安全的。因此,您还可以分配默认的空处理程序,以确保事件不为null。请注意,从技术上讲,这很容易受到其他人(使用GetInvocationList)清除所有事件的影响,因此请谨慎使用。

public event EventHandler Jump = delegate { };

public void OnJump()
{
    Jump(this, EventArgs.Empty);
}

答案 3 :(得分:0)

我正在尝试这个所以你可以复制这个代码。

public event EventHandler yourobjecthere
{
      add { anotherobject.Click += new EventHandler(value); }
      remove { anotherobject.Click -= new EventHandler(value); }
}

您的需求:

  1. += 来自添加
  2. -= 从删除

或者你可以加倍。 例子:

public event EventHandler yourobjecthere
{
      add
      {
           anotherobject.Click += new EventHandler(value);
           anotherobject2.Click += new EventHandler(value);
      }
      remove
      {
           anotherobject.Click -= new EventHandler(value);
           anotherobject2.Click -= new EventHandler(value);
      }
}