Существует ли способ записать Дополнительный Метод, который относится к нескольким типам?

Я пытаюсь записать дополнительный метод, который добавит функцию 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#? В противном случае есть ли рекомендуемая лучшая практика для этого типа ситуации?

8
задан Ben McCormack 1 January 2010 в 23:41
поделиться

1 ответ

Нет, в C# это невозможно. Для каждого типа необходимо создать по одному методу расширения. Ближайший - это метод расширения, работающий на интерфейсе, но в данном случае нет никакого INumeric интерфейса или чего-то подобного, что реализуется различными числовыми типами.

6
ответ дан 5 December 2019 в 22:19
поделиться