Один из способов изменить это - принять два параметра Action<string>
:
void GetData(Action<string> onSuccess, Action<string> onFailure)
{
//someCode
onSuccess("foo");
}
void Main()
{
GetData(onSuccess: result => {
// success part...
}, onFailure: error => {
// failure part
});
}
Другой способ - сохранить интерфейс IInteraction
:
public interface IInteraction
{
void OnSuccess(String result);
void OnFailure(String error);
}
void GetData(IInteraction interaction)
{
//someCode
interaction.OnSuccess("foo");
}
Но иметь конкретный класс GenericInteraction
, реализующий IInteraction
:
class GenericInteraction : IInteraction {
private Action<string> onSuccess;
private Action<string> onFailure;
public GenericInteraction(Action<string> onSuccess, Action<string> onFailure) {
this.onSuccess = onSuccess;
this.onFailure = onFailure;
}
public void OnSuccess(String result) { onSuccess(result); }
public void OnFailure(String error) { onFailure(error); }
}
Таким образом, вызывающий метод может выбрать либо передать onSuccess
, либо onFailure
"inline":
GetData(new GenericInteraction(onSuccess: result => {
// success part...
}, onFailure: error => {
// failure part
}));
Или передайте что-то другое, реализующее IInteraction
:
GetData(someOtherInteractionICreated);
Что ближе к тому, что вы могли бы сделать в Java.