您的位置:首页 > 编程语言 > C#

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

2017-12-20 20:52 435 查看
最近做项目时,有一个问题,即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");
}
}


总结:暂时想到可以这样做,避免了在一个回调方法里做过多逻辑操作。不过我觉得可能还有更好的方法。待闲下来再做研究。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐