Ho cercato di creare un evento generico. In sostanza si dovrebbe assomigliare a questa:EventHandlers and Covariance
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
{
}
}
voglio consentire all'utente di passare qualsiasi delegato, che è secondo parametro è derivato da "ISomeInterface."
"in" specifica contro-varianza, giusto? Ciò significa che se l'API si aspetta qualcosa di più generale, puoi passarlo qualcosa di più specifico (nella mia base "ISomeInterface" sarebbe generale, e il mio "SomeDerivedClass" sarebbe specifico.) Mi viene comunque detto il mio compilatore che "nessun sovraccarico per il gestore del metodo corrisponde a DelegateTest.SomeClass.SomeEventDelegate."
Mi chiedo perché questo non funziona. Quali sono i problemi che sarebbero causati se lo fosse? O mi sto perdendo qualcosa per farlo funzionare?
Grazie in anticipo!
Vedere http://stackoverflow.com/questions/129453/net-eventhandlers-generic-or-no –
Penso che non si possa avere un singolo evento per gestire più tipi, è possibile avere solo delegati. Quello che puoi fare è cambiare il gestore per accettare invece un 'ISomeInterface' e quindi controllare il tipo di oggetto che ha inviato. O usare l'interfaccia stessa. http://msdn.microsoft.com/en-us/library/dd469484.aspx – BrunoLM