Я представляю пару вариантов для этого ...
Вы можете создать базовый класс:
public abstract class ActionerOnA
{
public abstract void Execute(A a);
public void Execute(B b) => Execute(b.ToA());
public void Execute(int x, int y, int z) => Execute(new A(x, y, z));
}
public class Action1 : ActionerOnA
{
public override void Execute(A a)
{
DoSomethingHereWith(a);
}
// no need to worry about the other overloads
}
Вы бы использовали это с:
var actionerOnA = new Action1();
actionerOnA(a);
actionerOnA(b);
actionerOnA(x, y, z);
Вы можете использовать вспомогательный класс, в котором зависимость перемещается в конструктор, а не в методы:
public class ActionerOnA
{
private A _a;
private Action<A> _actionToExecute;
public ActionerOnA(Action<A> action, A a)
{
_a = a;
_actionToExecute = action;
}
public ActionerOnA(Action<A> action, B b) : this(action, b.ToA()) { }
public ActionerOnA(Action<A> action, int x, int y, int z) : this(action, new A(x, y, z)) { }
}
Затем вы бы использовали это как:
var actionerOnA = new ActionerOnA(Func1, a);
var actionerOnA = new ActionerOnA(Func1, b);
var actionreOnA = new ActionerOnA(Func1, x, y, z);
actionerOnA.Execute();
public void Func1(A a) { }