2014-03-13 169 views
0

EventArgs需要將對象的參數傳遞給事件處理程序。但我不想傳遞論據。如何刪除class C : EventArgs {}如何從事件處理程序中刪除EventArgs?

using System; 
class D 
{  
    public event EventHandler eventEH; 
    public void someMethod(C e) // class C are used here, that's why I can't to remove it 
    {  
     EventHandler objEH = eventEH; 
     if (objEH != null) 
      objEH(this, e); 
    } 
} 

class C : EventArgs {} // Need to remove 

class B 
{ 
    public B(D objD) 
     { objD.eventEH += new EventHandler(display); } 

    void display(object sender, EventArgs e) 
     { Console.WriteLine("display"); } 
} 

class A 
{ 
    static int Main() 
    { 
     D objD = new D(); 
     B objB = new B(objD); 
     C objC = new C(); 
     objD.someMethod(objC);   
     return 0; 
    } 
} 
+0

,你可以改變OnBallInPlay的簽名? – BradleyDotNET

+0

@LordTakkera是的,已經完成 – dima

+0

爲什麼要刪除'EventArgs'? – Enigmativity

回答

1

EventHandler委託的樣子:

void EventHandler(object, EventArgs); 

然而,事件可以在任何你想要的代表。

如果你真的想在你的事件的「C」的對象,只是聲明該事件爲:

public event Action<C> EventEH. 

否則,你可以只使用Action。然後,您可以刪除繼承等等。此時您也不需要EventHandler對象,只需給出函數名就可以正常工作。你的最終代碼看起來像:

using System; 
class D 
{  
    public event Action<C> eventEH; 
    public void someMethod(C e) 
    {  
     EventHandler objEH = eventEH; 
     if (objEH != null) 
      objEH(e); 
    } 
} 

class C {} 

class B 
{ 
    public B(D objD) 
     { objD.eventEH += display; } 

    void display(C cObject) 
     { Console.WriteLine("display"); } 
} 

class A 
{ 
    static int Main() 
    { 
     D objD = new D(); 
     B objB = new B(objD); 
     C objC = new C(); 
     objD.someMethod(objC);   
     return 0; 
    } 
} 

或者說,沒有 「C」:

using System; 
class D 
{  
    public event Action eventEH; 
    public void someMethod() 
    {  
     EventHandler objEH = eventEH; 
     if (objEH != null) 
      objEH(); 
    } 
} 

class B 
{ 
    public B(D objD) 
     { objD.eventEH += display; } 

    void display() 
     { Console.WriteLine("display"); } 
} 

class A 
{ 
    static int Main() 
    { 
     D objD = new D(); 
     B objB = new B(objD); 
     objD.someMethod();   
     return 0; 
    } 
} 
相關問題