C# 如何从类构造函数捕获事件触发
这里有一个例子C# 如何从类构造函数捕获事件触发,c#,events,constructor,C#,Events,Constructor,这里有一个例子 public class CodeGenerator { public delegate void GeneratorCalculatorEventHandler(decimal Fond); public event GeneratorCalculatorEventHandler eventName; public CodeGenerator() { eventName?.Invoke(0); } } 我
public class CodeGenerator
{
public delegate void GeneratorCalculatorEventHandler(decimal Fond);
public event GeneratorCalculatorEventHandler eventName;
public CodeGenerator()
{
eventName?.Invoke(0);
}
}
我怎样才能赶上这个活动?如果我这样做:
CodeGenerator CodeGen = new CodeGenerator();
CodeGen.eventName += CodeGen_eventName;
当处理程序尚未订阅该事件时,将触发该事件。是否可以在初始化时订阅事件?您应该将处理程序传递给构造函数并将其附加到事件,例如:
public class CodeGenerator
{
public delegate void GeneratorCalculatorEventHandler(decimal Fond);
public event GeneratorCalculatorEventHandler eventName;
public CodeGenerator(GeneratorCalculatorEventHandler listener)
{
eventName += listener;
eventName?.Invoke(0);
}
}
public class Test
{
public Test()
{
CodeGenerator gen = new CodeGenerator((sen) => { return; });
}
}
正如评论所说,这是一种糟糕的代码味道。听起来你在这里做了一些不寻常的事情,你应该考虑尝试找到一种不同的方式来解决你的问题。 它气味难闻的原因之一是:如果调用代码知道将处理程序传递给构造函数,那么该代码已经知道正在调用构造函数。调用方可以简单地使用构造的实例调用处理程序本身!事件通常用于处理程序无法预测或控制的情况,例如用户单击按钮
如果我是在你的情况下,我不会将处理程序传递给构造函数。我会使用静态事件。在构造函数中传递它,或将处理程序传递给构造函数,并让构造函数钩住事件,这是此时附加事件的唯一方式。@ShadyOverflow我想知道您正在尝试实现什么您不应该需要这个。。。答案表明这是可行的,但这只是走错了一步。@HenkHolterman我当时在想,为什么要在类实例化时触发事件?好吧,这是可行的,老实说,我希望有不同的、更干净的方法,但只要ti有效,一切都好,谢谢先生。还有其他对这个问题发表评论的人。