none
C# event RRS feed

  • 問題

  • 引發事件是否一定要有參數? 因為要設計一個 eventarg 的 class, 比較麻煩。

    public void OnEventTouch(object sender, d2eventArg e)

    同時, c# 有沒有像 vb.net 那樣的 addhandler / sub abc(....)handles obj1.event 的方式製造事件?

     

     以下的步驟引發事件正確嗎?

    namespace ConsoleApplication1
    
    {
    
      
    
    
    
     delegate void d2Event(); //Event step1
    
    
    
     class Program
    
     {
    
    
    
      static void Main(string[] args)
    
      {
    
       doIt do1 = new doIt();     
    
       Main(args);
    
      }
    
     }
    
    
    
    
    
     class doIt
    
     {
    
      event d2Event d2Raise;
    
      string s;
    
    
    
      public doIt()
    
      {
    
        string c = Console.ReadLine();
    
        DelegationEventTestClass d2EventPerform = new DelegationEventTestClass();
    
        d2Raise = new d2Event(d2EventPerform.EventWarn);     
    
    
    
         s = Console.ReadLine();
    
        Console.WriteLine("===========You input ==== " + s);
    
        OnEventTouch(this, new d2eventArg()); // Event Step 3, raising the event
    
       }
    
    
    
    
    
    
    
    // 是否一定要有參數?
    
    
    
      public void OnEventTouch(object sender, d2eventArg e) 
    
    
    
      {
    
       if (s == "pls raise event" && d2Raise != null)
    
       {
    
        d2Raise();
    
       }
    
       else
    
       {
    
        Console.WriteLine("Event Fails");
    
       }
    
      }
    
     }
    
    
    
    
    
     class DelegationEventTestClass
    
     {
    
      //this class is just to provide the method to be executed to Delegation
    
      public void EventWarn()
    
      {
    
       Console.WriteLine("++++++++++++Event raised!");
    
       Console.WriteLine("Event raised!++++++++++++");
    
      }
    
     }
    
    
    
    
    
     class d2eventArg : EventArgs
    
     {
    
       private string s1;
    
      public string get_s1() // this method can be skipped, just for demo
    
      {
    
       s1 = "yes";
    
       return s1;
    
      }
    
     }
    
    
    
    
    
     
    
    } //end of Namespace
    
    
    
    

    2011年5月23日 下午 05:26

解答

  • 1. 你可以用預設的 EventArgs 當參數,只有你覺得需要傳其他參數的事件,才會需要設計自己的 EventArgs 類別與 EventHandler delegate。
    2. 事件常式也有固定的 EventHandler delegate 可以用,無參數的事件直接用這個即可。
    3. 事件固定是用 (object, EventArgs) 當參數,不可能有無參數這件事。
    4. C# 的事件註冊是用 += (等同於 AddHandler) 以及 -= (等同於 RemoveHandler) 來處理。 
    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/pages/StudyAzurecom-yun-duan-xue-tang/155855707799579
    2011年5月24日 上午 12:40
    版主

所有回覆

  • 1. 你可以用預設的 EventArgs 當參數,只有你覺得需要傳其他參數的事件,才會需要設計自己的 EventArgs 類別與 EventHandler delegate。
    2. 事件常式也有固定的 EventHandler delegate 可以用,無參數的事件直接用這個即可。
    3. 事件固定是用 (object, EventArgs) 當參數,不可能有無參數這件事。
    4. C# 的事件註冊是用 += (等同於 AddHandler) 以及 -= (等同於 RemoveHandler) 來處理。 
    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/pages/StudyAzurecom-yun-duan-xue-tang/155855707799579
    2011年5月24日 上午 12:40
    版主
  • C# 都 Event 有非常多種樣式

    你寫的最傳統

    C# 2.x 好像可用 Event EvetHandle<EventArg> Click 樣式

    C# 3.x 可以用匿名委派 還有什麼連叭噠表達式,還有用 Action 去設計..

    你整個C#文件K完就知了

     

    但我認為用C# 2.0 最笨的方式去做比較實際.

    因為太先進的方法很多人看不懂.像我們部門設計是跨領域的.有人寫IPhone,有人寫Android..

    大家要知道東西太多.但都不精.寫人家看不懂就被幹交.

    2011年5月24日 上午 01:12
  • 樓上那位好說, 你倒底在講什麼 ? 不清不楚又顛三倒四的.

    2011年5月24日 上午 03:06