He intentado crear un evento genérico. Básicamente se debe tener este aspecto: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
{
}
}
Quiero que el usuario pueda pasar cualquier delegado, que es segundo parámetro se deriva de "ISomeInterface."
"in" especifica contra-varianza, ¿verdad? Eso significa que si la API espera algo más general, puede pasarle algo más específico (en mi base "ISomeInterface" sería general, y mi "SomeDerivedClass" sería específica). Me están diciendo que soy el compilador que "ninguna sobrecarga para el manejador de métodos coincide con DelegateTest.SomeClass.SomeEventDelegate".
Me pregunto por qué esto no está funcionando. ¿Cuáles son los problemas que se causarían si fuera así? ¿O me estoy perdiendo algo para que funcione?
¡Gracias de antemano!
Ver http://stackoverflow.com/questions/129453/net-eventhandlers-generic-or-no –
Creo que no puede haber un solo evento para manejar varios tipos, solo puede tener delegados. Lo que puede hacer es cambiar su manejador para aceptar un 'ISomeInterface' en su lugar, y luego verificar el tipo de objeto que envió. O usa la interfaz en sí. http://msdn.microsoft.com/en-us/library/dd469484.aspx – BrunoLM