Я пытаюсь записать дополнительный метод, который добавит функцию HasFactor
к классу int
в C#. Это работает замечательно, как так:
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();
}
}
Это работает отлично потому что переменная i
в Main()
метод выше объявляется как int
. Однако, если i
объявляется как Int16
или Int64
, дополнительный метод не обнаруживается, если он явно не снят как int
или Int32
.
Я теперь хотел бы применить то же HasFactor
метод к Int16
и Int64
. Однако я не записал бы отдельные дополнительные методы для каждого типа int
. Я мог записать отдельный метод для Int64
и затем явно бросок все как Int64
или long
для дополнительного метода для появления.
Идеально, я предпочел бы иметь тот же дополнительный метод, относятся ко всем трем типам, не имея необходимость копировать и вставлять много кода.
Это даже возможно в C#? В противном случае есть ли рекомендуемая лучшая практика для этого типа ситуации?
Нет, в C# это невозможно. Для каждого типа необходимо создать по одному методу расширения. Ближайший - это метод расширения, работающий на интерфейсе, но в данном случае нет никакого INumeric интерфейса или чего-то подобного, что реализуется различными числовыми типами.