C#多处调用接口、仅一个回调方法的处理思路
2017-12-20 20:52
435 查看
最近做项目时,有一个问题,即SDK的接口《获取手柄唯一标识》是异步用回调的方式传回的。
但有关手柄的连接、绑定、解绑等操作都依赖这个接口,回调只有一个,回调里如何处理不同的位置调用,并作出相应操作是重点。
思路1、在回调中加入判断
在全局设置int型变量,每当有需要调用接口时,为int变量赋值,在回调中判断该变量,分别处理。
总结:这种方法并不是最优解,因为有大量逻辑代码写在了回调中。属于救急方法,后期一定需要优化。
思路2、利用委托的特性+工厂方法模式生成特定的函数
C#的委托特性,可以解决很多指派型的工作。
如上述例子,不同的地方使用同一个回调函数,不如把每一种情况分别赋予一个委托,调用的位置赋予相应的委托即可。
那么只需要在需要的地方接入相应的委托就可以了。比如上面写了两个委托,那么就可以用在两个地方,以此类推。
总结:暂时想到可以这样做,避免了在一个回调方法里做过多逻辑操作。不过我觉得可能还有更好的方法。待闲下来再做研究。
但有关手柄的连接、绑定、解绑等操作都依赖这个接口,回调只有一个,回调里如何处理不同的位置调用,并作出相应操作是重点。
思路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"); } }
总结:暂时想到可以这样做,避免了在一个回调方法里做过多逻辑操作。不过我觉得可能还有更好的方法。待闲下来再做研究。
相关文章推荐
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
- 一个ArcGIS Javascript API的BUG和处理办法 - 调用两次Draw工具条deactivate方法导致的错误
- 一个ArcGIS Javascript API的BUG和处理办法 - 调用两次Draw工具条deactivate方法导致的错误
- 飞信WEB接口的一个返回网页C#处理源码
- c#中一个窗体调用另一个窗体的控件及方法(转贴)
- NET 2.0(C#)调用ffmpeg处理视频的方法
- 如何用C#创建一个类并在其他Web页中调用该类的方法(2)
- C#调用VC DLL接口函数参数类型转换的方法
- 关于c#调用DLL的方法,接口,类
- 飞信WEB接口的一个返回网页C#处理源码
- C#调用VC DLL接口函数参数类型转换的方法
- 调用多个方法,一个处理函数
- C#反射调用另外一个类中的私有字段和方法
- C#中同一个类的多个构造方法之间的调用
- asp.net C#调用mencoder处理视频的方法
- 处理Rational Rose 2003画图时类名、接口名等名称过长自动缩进的一个简单方法
- C#调用VC DLL接口函数参数类型转换方法介绍