【发布时间】:2021-04-18 13:40:15
【问题描述】:
我在Program.cs 中有事件处理方法c_CriticalSituationHappened
void c_CriticalSituationHappened(object sender, CriticalSituationGacEventArgs e)
{
if (e.TypeDisrepair != TypeDisrepairGac.None)
{
start_time = DateTime.UtcNow;
typeDisrepair = e.TypeDisrepair;
WriteLine("Crit sit time: " + start_time);
isStarted = true;
}
}
如果我将它移动到类库中,我会导入它。
public class CorrectBehaviorCheck
{
public void CriticalSituationHappened1(object sender, CriticalSituationGacEventArgs e)
{
if (e.TypeDisrepair != TypeDisrepairGac.None)
{
criticalSituationStartTime = DateTime.Now;
TypeDisrepair = e.TypeDisrepair;
Console.WriteLine("111");
isStarted = true;
}
}
}
签名保持完全相同。 但是如果尝试
using cbc = mymodule.CorrectBehaviorCheck;
class Program{
static void Main(string[] args){
cbc a = new cbc();
CriticalSituationHappened += a.CriticalSituationHappened1;
}
}
代替
class Program{
static void Main(string[] args){
CriticalSituationHappened += c_CriticalSituationHappened;
}
}
我有一个错误Expected a method with 'void CriticalSituationHappened1(object?, CriticalSituationGacEventArgs)' signature 我做错了什么?两种方法具有相同的签名。为什么将方法放入类库时程序会中断?
在 Program.cs 中:
protected virtual void OnCriticalSituationHappened(CriticalSituationGacEventArgs e)
{
EventHandler<CriticalSituationGacEventArgs> handler = CriticalSituationHappened;
if (handler != null)
{
handler(this, e);
}
}
public static event EventHandler<CriticalSituationGacEventArgs> CriticalSituationHappened;
【问题讨论】:
-
您能说明
CriticalSituationHappened是如何与任何代表一起定义的吗? -
最后添加
-
CriticalSituationGacEventArgs定义在哪个程序集中?你有多个CriticalSituationGacEventArgs的定义吗? -
在 Program.cs 的项目中有一个定义,在导入的模块中有一个定义。 (代码相同) public class CriticalSituationGacEventArgs : EventArgs { public string Message {get;放;};公共类型DisrepairGac {get;放;}}。 TypeDisrepairGac 是枚举列表
标签: c# events event-handling delegates class-library