c#传递内联接口,如委托方法。

问题描述 投票:0回答:1

I',m using this syntax in java.I'm new at c#oding.How can I implement that structure in c#? Does c# support inline instance interface as 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一样支持inline实例接口?

c# interface delegates
1个回答
1
投票

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

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

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

或者通过其他东西来实现 IInteraction:

GetData(someOtherInteractionICreated);

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

© www.soinside.com 2019 - 2024. All rights reserved.