Estoy tratando de escribir un método de extensión que agregará la función HasFactor
a la clase int
en C#. Esto funciona de maravilla, así:¿Hay alguna manera de escribir un Método de extensión que se aplique a varios tipos?
static class ExtendInt
{
public static bool HasFactor(this int source, int factor)
{
return (source % factor == 0);
}
}
class Program
{
static void Main()
{
int i = 50;
int f = 2;
bool b = i.HasFactor(f);
Console.WriteLine("Is {0} a factor of {1}? {2}",f,i,b);
Console.ReadLine();
}
}
Esto funciona muy bien, porque la variable i
en el método anterior Main()
se declara como un int
. Sin embargo, si i
se declara como Int16
o Int64
, el método de extensión no se muestra a menos que se muestre explícitamente como int
o Int32
.
Ahora me gustaría aplicar el mismo método HasFactor
a Int16
y Int64
. Sin embargo, prefiero no escribir métodos de extensión separados para cada tipo de int
. I podría escribir un único método para Int64
y luego lanzar explícitamente todo como Int64
o long
para que aparezca el método de extensión.
Idealmente, preferiría que el mismo método de extensión se aplicara a los tres tipos sin tener que copiar y pegar una gran cantidad de código.
¿Esto es posible incluso en C#? Si no es así, ¿hay una mejor práctica recomendada para este tipo de situaciones?
Basado en la entrada de Eilon y Marc Gravell, creo que voy a crear un método de extensión para el tipo 'Int64'. Esto debería funcionar para lo que estoy haciendo. –