私は一般的なイベントを作成しようとしてきました。基本的には次のようになります。
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
{
}
}
2番目のパラメーターが「ISomeInterface」から派生したデリゲートをユーザーが渡せるようにしたい。
「in」は逆分散を指定しますよね?つまり、APIがより一般的なものを期待している場合は、より具体的なものを渡すことができます(私のベースでは、「ISomeInterface」が一般的で、「SomeDerivedClass」が具体的です)。 「メソッドハンドラーのオーバーロードはDelegateTest.SomeClass.SomeEventDelegateに一致しません。」
なぜこれが機能しないのか疑問に思います。もしそうなら、どのような問題が発生するでしょうか?それとも私はそれが機能するために何かが欠けていますか?
前もって感謝します!