На данный вопрос уже ответили:
Как написать метод/класс, который бы одинаково работал со всеми числовыми типами?
3 ответа
Например класс для работы с комплексными числами. Я хочу чтобы конструктор и некоторые методы могли принимать как int так и double. Внутри методов только математические операции которые выполнимы для всех числовых типов. Более расширенная версия задания, иметь возможность передавать в методы любые класы которые поддерживают математические операции.
Подскажите каким образом лучше всего это реализовать, мне на ум приходит только создание интерфейса который бы определял все операции а потом нужные класы наследовать от него, но тогда как быть с int и double?
Ответ
Можно сделать кодогенерацию на встроенном в Visual Studio генераторе кода T4
Добавляем в проект Text Template (с расширением .tt). Пишем в нём, например, такой код:
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
namespace MyApp // заменить на нужное
{
public class Calculator
{
<#
// Добавить/удалить типы
var types = new string[] { "int", "long", "float", "double" };
foreach(var T in types)
{
#>
public <#=T#> Add(<#=T#> a, <#=T#> b)
{
return a + b;
}
public <#=T#> Subtract(<#=T#> a, <#=T#> b)
{
return a - b;
}
<#
}
#>
}
}
Несложно заметить, что это очень похоже на Razor (веб-разработчики хорошо с ним знакомы).
output extension нужно заменить на .cs - нам нужен на выходе код C#.
Компилируем проект. Получаем класс с набором перегрузок методов.
Для удобной работы с T4 в Студию можно установить какое-нибудь расширение, например, tangible T4.
Комментариев нет:
Отправить комментарий