【发布时间】:2014-06-05 18:22:09
【问题描述】:
是否有某种方法可以简化委托的创建以便于阅读编码?这是我想做的一个例子,我想知道是否有办法做到这一点:
public delegate void MyDelegate(Object sender, EventArgs e);
public class ClassWithEvent
{
public event MyDelegate MyEvent;
public ClassWithEvent() { }
public void RegisterForEvent(Method)
{
MyEvent += new MyDelegate(Method);
}
public void Trigger()
{
if(MyEvent != null)
{
MyEvent(this, null);
}
}
}
public class ClassToRegister
{
public ClassWithEvent MyEventClass = new ClassWithEvent();
public ClassToRegister() { }
public void RegisterMe()
{
MyEventClass.RegisterForEvent(MyEventMethod);
MyEventClass.Trigger();
}
public void MyEventMethod(Object sender, EventArgs e)
{
Console.Writeline("Hello there!");
}
}
尝试这样做的目的是为了封装。我假设触发事件的类本质上是访问它的类的黑匣子。由于这将是我能看到的最可取的面向对象流程,我想知道是否有办法做到这一点,或者如果注册类不了解它必须创建的委托,是否根本没有办法做到这一点。
【问题讨论】:
-
此代码是您想要工作的代码,还是可以工作但您想修改的代码?如果是后者,您能否提供您认为应该有效的方法?
-
这是假设代码。我对活动和代表还是新手,所以我可能在这里犯了一个与我的问题无关的错误。我只是想知道是否有一种方法可以让一个类简单地传递其方法,而无需在自己的代码中为该方法声明委托。 IE。 - “ClassToRegister”可以在不知道“MyDelegate”名称的情况下订阅“MyEvent”。
-
通用 Action
-
也许吧?我不确定如何创建泛型。我想我应该研究那棵树。
-
这主要是一个文体问题——我什至不确定我所问的是否有用,我想这将允许一种方法订阅可能正在使用的多个不同类完全符合 (Object sender, EventArgs e) 参数的不同委托。
标签: c# events delegates encapsulation object-oriented-analysis