Tengo un requisito para crear un método estático en mi clase base, pero no me gusta que tenga que declarar los argumentos de tipo, así que me pregunto si voy a hacer esto la manera correcta.Mejor manera de definir el método estático
Básicamente, estoy asignando delegados que asociaré con las propiedades de la clase. Yo podría poner el método en las clases heredadas, así:
public class Foo
{
public string Property1 { get; set; }
}
public class InheritsFoo : Foo
{
public void AssignDel<TVal>(
Expression<Func<InheritsFoo, TVal>> expr,
Action<InheritsFoo, TVal> action)
{
}
}
O, en una clase de extensión, que podría hacer esto:
public static void AssignDel<T, TVal>(
this T source,
Expression<T, TVal>> expression,
Action<T, TVal> action)
where T : Foo
{
}
Ambos me permitiría utilizar AssignDel
en una clase instanciada:
var foo = new InheritsFoo();
foo.AssignDel(x => x.Property1, handler);
pero tengo un requisito para hacer AssignDel
estática. Esto hace que la extensión sea inútil. Todavía funciona en InheritsFoo
, pero realmente quiero mover esto a la clase base. Si lo intento, el argumento de los genéricos no puede inferirse, y tengo que cambiar el uso del método:
InheritsFoo.AssignDel<InheritsFoo, string>(x => x.Property1, handler);
¿Hay una salida aquí, otra manera de hacer esto que no he pensado?
EDITAR: para tratar el problema en los comentarios sobre si el método de extensión debería funcionar o no ... Fui a la URL a la que hace referencia @Mark M. Resulta que si lo escribo como tal ...
InheritsFoo foo = null;
foo.AssignDel(x => x.Property1, handler);
Eso compila (aunque no sé si se ejecutará). Aún así, no piense que califica como usar un método estático, ya que 'foo' todavía se considera una instancia; Una instancia nula, pero una instancia no obstante.
Los métodos de extensión ya son estáticos. ¿Cómo un requisito para hacer que el método sea estático se interponga en el camino de usar métodos de extensión? –
"Tengo un requisito para hacer' AssignDel' estático ". Entonces hazlo estático. –
@Kirk: aunque los métodos de extensión se definen como métodos estáticos, solo se pueden usar como métodos de instancia de la clase prevista. –