c# 像委托方法一样传递内联接口

c# passing inline interface like delegate method

i',m 在 java:

中使用此语法
 public interface Interaction
    {
        void onSuccess(String result);
        void onFailure(String error);
    }

    void getData(Interaction interaction)
    {
        //someCode
        interaction.onSuccess("foo");
    }

    void main()
    {
        getData(new Interaction()
        {
            @override
            void onSuccess(String result)
            {
                    //here is sucess part 
            }

            @override
            void onFailure(String error)
            {
                   //here is failure part 
            }
        })
    }

我是 C# 编码新手。我如何在 C# 中实现该结构? c# 是否支持内联实例接口 java?

重新设计的一种方法是接受两个 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");
}

但是有一个具体的 class 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); }
}

这样,方法的调用者可以选择传入 onSuccessonFailure "inline":

GetData(new GenericInteraction(onSuccess: result => {
    // success part...
}, onFailure: error => {
    // failure part
}));

或传递其他实现 IInteraction:

的东西
GetData(someOtherInteractionICreated);

这更接近您在 Java 中可以做的事情。