2014-03-13 164 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; 
    } 
} 
相关问题