我一直在尝试创建一个通用事件。基本上它应该是这样的:
namespace DelegateTest
{
class Program
{
static void Main(string[] args)
{
var lol = new SomeClass();
lol.SomeEvent += handler;
}
static void handler(object sender, SomeDerivedClass e)
{
}
}
class SomeClass
{
public delegate void SomeEventDelegate<in T>(object sender, T data);
public event SomeEventDelegate<ISomeInterface> SomeEvent;
}
interface ISomeInterface
{
}
class SomeDerivedClass : ISomeInterface
{
}
}
我想允许用户传递第二个参数派生自“ISomeInterface”的任何委托。
“in”指定逆变,对吧?这意味着如果 API 需要更通用的东西,你可以传递更具体的东西(在我的基础中,“ISomeInterface”是通用的,而我的“SomeDerivedClass”是特定的。)但是,我被告知我的编译器“方法处理程序没有重载匹配 DelegateTest.SomeClass.SomeEventDelegate。”
我想知道为什么这不起作用。如果是的话会带来什么问题?或者我错过了什么让它工作?
提前致谢!