C#多处调用接口、仅一个回调方法的处理思路

来源:互联网 发布:单机成本核算软件 编辑:程序博客网 时间:2024/05/22 08:09

最近做项目时,有一个问题,即SDK的接口《获取手柄唯一标识》是异步用回调的方式传回的。
但有关手柄的连接、绑定、解绑等操作都依赖这个接口,回调只有一个,回调里如何处理不同的位置调用,并作出相应操作是重点。

思路1、在回调中加入判断
在全局设置int型变量,每当有需要调用接口时,为int变量赋值,在回调中判断该变量,分别处理。

public int type=-1;public void GetIDCallback(string id) {        string s = id;        Debug.Log("伊沢ライオン,type:" + type);        if (type== 1){  //初始化时  }        else if (type== 2) {//绑定时 }        else if (type== 3) {//解绑时 }        else if (type==4) {//连接状态回调时 }    }

总结:这种方法并不是最优解,因为有大量逻辑代码写在了回调中。属于救急方法,后期一定需要优化。

思路2、利用委托的特性+工厂方法模式生成特定的函数
C#的委托特性,可以解决很多指派型的工作。
如上述例子,不同的地方使用同一个回调函数,不如把每一种情况分别赋予一个委托,调用的位置赋予相应的委托即可。

public void GetIDCallback(string id) {        if (ClickTestEvent != null)            BindEvent(id);//绑定时        if (DebugMenuTestEvent != null)           UnbindEvent(id);//解绑时    }

那么只需要在需要的地方接入相应的委托就可以了。比如上面写了两个委托,那么就可以用在两个地方,以此类推。

public class TestA{MyUtil.BindEvent+= BindEventCallback;    public void BindEventCallback()    {        Debug.Log("伊沢ライオン,执行BindEventCallback");    }}
public class TestB{MyUtil.UnbindEvent+= UnbindEventCallback;    public void UnbindEventCallback()    {        Debug.Log("伊沢ライオン,执行UnbindEventCallback");    }}

总结:暂时想到可以这样做,避免了在一个回调方法里做过多逻辑操作。不过我觉得可能还有更好的方法。待闲下来再做研究。

原创粉丝点击