我的“安全”程序集包含以下代码:
public delegate void InteropEventDelegate(InteropEventType etype, string data, string data2, string data3);
public event InteropEventDelegate InteropEvent;
第二个程序集引用了我的“安全”程序集,并包含以下代码:
void LoadSecurity()
{
if (!AssemblyIsLocked && Security == null)
{
this.Security = new Security.Security(UnlockCode);
this.Security.InteropEvent += new Security.Security.InteropEventDelegate(Security_InteropEvent);
}
}
void Security_InteropEvent(InteropEventType etype, string data, string data2, string data3)
{
throw new NotImplementedException();
}
Security_InteropEvent是由IntelliSense生成的,并且具有正确的签名,但是我收到错误“'Security_InteropEvent'的过载与委托'Security.Security.InteropEventDelegate'匹配”。为什么呢?
答案 0 :(得分:3)
你在某处宣布了另一种名为InteropEventType
的类型吗?这会使Security_InteropEvent
的第一个参数与InteropEventDelegate
的第一个参数的类型不同。
虽然我提到了名字,但我强烈建议你不要给类型和命名空间赋予相同的名称。 Eric Lippert有一个whole blog series关于此的危险。 (我说的是Security.Security
,我最初认为这是一个命名不好的命名空间,直到我看到你在它上面调用构造函数。)