Здравствуйте, Cyberax, Вы писали:
C>И выглядеть будет изоморфно коду моей реализации.
Pre-condition: Твой код я не видел и, пока не увижу, не могу его обсуждать.
Это будет код на C# — он не будет точно таким же, но будет решать ту же задачу. Или тебе тупо важна та же реализация вплоть до точки с запятой?
Ну и интерфейс у метода можно сделать такой же, как тот, что видит VBA, естественно (а что ещё нужно вызывающей стороне?...):
void Process(object obj1, object obj2, [собственно параметры метода])
{
//...
}
Дальше в реализации на .NET есть как минимум три варианта:
Тупые if по типу и вызов нужного метода внутри. Так писать неудобно и никто, естественно, как правило так не пишет.
Декларативное описание реализации для данных двух типов. Тут атрибуты и reflection, так что всё в рантайме. Зато никакого хардкодинга и максималоно упрощено добавление новой реализации.
То же, что и в п.2, но без reflection в рантайме — этот этап перенесён в compile-time. Тут можно использовать Nemerle и тоже всё будет пучком. Кстати, я думаю что тут хватит и сопоставления по образцу.
Для примеру вот простенькая реализация такого метода на Nemerle с использованием pattern-matching:
using System;
using System.Console;
public module Worker
{
public Process(obj1 : object, obj2 : object, n : int) : void
{
match ((obj1, obj2)) {
| (_ is int, _ is string) => WriteLine($"For int and string n = $n")
| (_ is double, _ is string) => WriteLine($"For double and string n = $n")
| (_ is string, _ is DateTime) => WriteLine($"For string and DateTime n = $n")
}
}
}
Worker.Process(1, "a", 2);
Worker.Process(1.1, "a", 3);
Worker.Process("a", DateTime.Now, 4);
Такой код выведет в консоль:
For int and string n = 2
For double and string n = 3
For string and DateTime n = 4