Страницы

Поиск по вопросам

пятница, 26 апреля 2019 г.

C# как создать класс который бы одинаково работал с int и double? [дубликат]

На данный вопрос уже ответили: Как написать метод/класс, который бы одинаково работал со всеми числовыми типами? 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.

Комментариев нет:

Отправить комментарий