Скажем, я хочу иметь метод, который принимает любое число, есть ли базовый класс (или какая-то другая концепция), которую я могу использовать?
Насколько я знаю, мне приходится делать перегрузки для всех различных числовых типов (Int32, Int16, Byte, UInt32, Double, Float, Decimal и т. Д.). Это кажется ужасно утомительным. Либо так, либо используйте тип «объект» и генерируйте исключения, если они не конвертируемы или не присваиваются двойному типу, что довольно плохо, так как не требует проверки времени компиляции.
UPDATE:
Хорошо, спасибо за комментарии, вы правы, Пугало и Марк, фактически объявляя, что Double действительно работает для всех, кроме Decimal.
Итак, ответ, который я искал, - Double - он действует здесь как базовый класс, так как ему можно назначить большинство числовых типов. (Я полагаю, что десятичность не может быть назначена на Double, поскольку она может стать слишком большой.)
public void TestFormatDollars() {
int i = 5;
string str = FormatDollars(i); // this is OK
byte b = 5;
str = FormatDollars(b); // this is OK
decimal d = 5;
str = FormatDollars(d); // this does not compile - decimal is not assignable to double
}
public static string FormatDollars(double num) {
return "$" + num;
}