No seas extremo. EventHandler(object sender, EventArgs e)
tiene un remitente de objeto para que podamos usarlo en muchas circunstancias. Pero eso no significa que un emisor fuertemente tipado sea malo. Un remitente fuertemente tipado es útil cuando este delegado no va a ser ampliamente utilizado (como EventHandler
) p.
public delegate void SaveHandler(Controller sender, EventArgs e);
Ahora otros desarrolladores (o alguien que use su biblioteca) pueden recogonize que el remitente tienen que ser un Controller
, y ellos estarán contentos de no codificar así:
public void MySaveHandler(object sender, EventArgs arg)
{
var controller = sender as Controller;
if (controller != null)
{
//do something
}
else
{
//throw an exception at runtime?
//It can be avoided if sender is strongly-typed
}
}
Y usted incluso puede hacerlo genérico:
public delegate void SaveHandler<T>(T sender, EventArgs args)
where T: IController;
Es puramente legal y buena práctica en C#. Debe aclarar lo que quiere hacer y luego elegir la mejor manera. Cualquiera de ellos es malo/malo.
Si tiene que preguntar "¿por qué no?", Realmente no debería hacerlo. Las pautas sobre cómo crear firmas de eventos fueron diseñadas como si fueran por una razón. Al menos lee por esas razones antes de decidir desviarse de ellas solo porque puedes. –
Piénselo: ¿qué pasaría si luego considera que su evento se ajusta a otro lugar y desea plantearlo desde otro punto de su código? ¿Sería la misma clase de remitente? No si especifica el tipo de remitente ... – Smur
@Lasse: podría preguntar "¿por qué?".No sabía que era una guía para esto, no soy un programador. Sin embargo, como hay una guía, me gustaría saber si es común o muy raro romper esta directriz o no. – bretddog