да, об этом мне известно. не хотелось бы использовать рефлексию.
просто params не подходит, потому что я хотел бы видеть конкретные типы, которые нужно передать в метод. сейчас приведу пример, в чём заключается неудобство использовании перегрузок(даже не из-за copy paste):
public interface ITest<T1, T2>
{
void NothingDo(T1 t1, T2 t2);
}
public class ConcretImpl : ITest<int, string>
{
public void NothingDo(int age, string name)
{
Console.WriteLine("Age: {0}, Name: {0}", age, name);
}
}
public class HolderConcretImpl
{
public static void Do<IMPL, T1, T2>(T1 v1, T2 v2)
where IMPL : ITest<T1, T2>, new()
{
(new IMPL()).NothingDo(v1, v2);
}
}
public class Program
{
public static void Main(string[] args)
{
HolderConcretImpl.Do<ConcretImpl, int, string>(22, "Jane");
Console.Read();
}
}
HolderConcretImpl.Do(22, "Jane"); Не удобно, что нужно повторно указывать необходимые типы, которые нужны ConcreteImpl, ведь он уже реализовал интерфейс.
просто params не подходит, потому что я хотел бы видеть конкретные типы, которые нужно передать в метод. сейчас приведу пример, в чём заключается неудобство использовании перегрузок(даже не из-за copy paste):
HolderConcretImpl.Do(22, "Jane"); Не удобно, что нужно повторно указывать необходимые типы, которые нужны ConcreteImpl, ведь он уже реализовал интерфейс.