Sto provando a scrivere un metodo di estensione che aggiungerà la funzione HasFactor
alla classe int
in C#. Questo funziona meravigliosamente, in questo modo:C'è un modo per scrivere un metodo di estensione che si applica a più tipi?
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();
}
}
Questa grande opera, perché variabile i
nel metodo Main()
sopra è dichiarato come un int
. Tuttavia, se i
viene dichiarato come Int16
o , il metodo di estensione non viene visualizzato a meno che non sia espressamente castato come int
o Int32
.
ora mi piacerebbe applicare lo stesso metodo HasFactor
-Int16
e Int64
. Tuttavia, preferirei non scrivere metodi di estensione separati per ciascun tipo di int
. I potrebbe scrivere un unico metodo per Int64
e quindi trasmettere espressamente tutto come Int64
o long
in modo che il metodo di estensione venga visualizzato.
Idealmente, preferirei applicare lo stesso metodo di estensione a tutti e tre i tipi senza dover copiare e incollare molto codice.
Ciò è possibile anche in C#? In caso contrario, esiste una procedura consigliata per questo tipo di situazione?
Sulla base degli input di Eilon e Marc Gravell, penso che creerò un metodo di estensione per tipo "Int64". Questo dovrebbe funzionare per quello che sto facendo. –