调用公共事件来触发C#中另一个类的方法

时间:2017-02-10 07:49:08

标签: c# events

我想在C#中询问这是否可能是事件。到目前为止,我对事件的工作并不多。

假设我有一个订阅FormClosing事件的类A:

public class A
{
   private void f_FormClosed(object sender, FormClosedEventArgs e)
   {
     //Now here a public Event should be called
   }
}

现在我想要一个公共事件被调用。我们现在说我有另一个B级,它有一定的方法。

public class B
{
  public void DoSomething()
  {
  }
}

现在我想做什么:

表单已关闭,因此会收到A类通知。在那里,一个公共事件被触发(在公共类中的某个地方)。我想在B类中将我的方法订阅到此事件,以便在发生这种情况时调用它。这可能吗?语法怎么样?到目前为止,我还没有找到有用的东西。

编辑:我无法直接从A类创建B类实例。

1 个答案:

答案 0 :(得分:3)

它可能。

  1. 在A。
  2. 中创建新活动
  3. 在事件处理程序f_FormClosed
  4. 中提升事件
  5. 在B。订阅此活动。
  6. 在B中的eventhandler中调用方法DoSomething
  7. 对于语法部分,您可以检查MSDN

    // A delegate type for hooking up change notifications.
      public delegate void ChangedEventHandler(object sender, EventArgs e);
    
     // A class that works just like ArrayList, but sends event
     // notifications whenever the list changes.
     public class ListWithChangedEvent: ArrayList 
     {
        // An event that clients can use to be notified whenever the
        // elements of the list change.
        public event ChangedEventHandler Changed;
    
        // Invoke the Changed event; called whenever list changes
        protected virtual void OnChanged(EventArgs e) 
        {
          if (Changed != null)
           //you raise the event here.
            Changed(this, e);
        }
     }
    

    现在在你的其他班级做这样的事情

      class EventListener 
       {
         private ListWithChangedEvent List;
    
          public EventListener(ListWithChangedEvent list) 
          {
            List = list;
            // Add "ListChanged" to the Changed event on "List".
            //This is how we subscribe to the event created in ListWithChangedEvent class
            List.Changed += new ChangedEventHandler(ListChanged);
          }
    
         // This will be called whenever the list changes.
         private void ListChanged(object sender, EventArgs e) 
         {
          Console.WriteLine("This is called when the event fires.");
         }
     }