首页 > 编程知识 正文

耦合电感,备自投中解耦合作用

时间:2023-05-06 21:26:25 阅读:11938 作者:1473

技巧并不意味着“奇技淫巧”,而是通过某种方法和手段使开发过程更加容易,开发内容更加直观的方式。 在开发过程中,应该提倡多用技巧而不是乱搞,但如果无视代码的顽强性盲目追求技巧的使用,就会失去它。 (不定期更新)

附件:以下内容组合使用的软件为Unity,但技巧相同。

解耦开发各项功能是初级程序员到中级程序员的一个贸易标志。 因此,深入了解解耦的方法,使其在开发过程中能自然使用,是优秀程序员的基本素养。

1 .使用活动消息进行广播,以及使用活动进行广播和监听,都需要了解请求。 在这里,我推荐用C#委托比较好的文章。 也需要知道静态类。

这种方法的优点也很明显,广播者不需要关心监听者是谁,监听者也不需要关心广播者,每个代码只需要关心自己。

先写好消息管理类

//定义委托类型。 委托定义了类似于int的数据类型,并使用函数对其进行公共删除语音回调(publicdelegatevoidcallbackt (targ; //定义事件类型,侦听器只监听特定事件类型//(当然也可以不确定类型而监听所有事件,但这是低效且混乱的) publicenumeventtype (example type1) exampletype2)//如何定义事件消息管理中心以及如何添加拦截和广播publicstaticeventcenter { privatestaticdictionaryeventtype, 如何添加delegate m _ event DIC=newdictionaryeventtype,delegate //侦听器(添加到未加入回调的类型) publicstaticvoidaddmonitor () Callback callback ) )打开添加监视器(eventtype,Callback callback ) )打开添加监视器(m _ event DIC [ event type ]=(callback Delegate类的Combine方法(//添加侦听程序的方法(添加到单个泛型Callback类型,后面的多个等) publicstaticvoidaddmonitort )事件类型事件类型,,,等等如何删除//侦听器(删除未参与呼叫的类型) publicstaticvoidremovemonitor (event type,Callback callback ) onremovemonitor ) ever callbackck ) ) onremovemonito m _ event DIC [ event type ]=(callback ) m_eventDic[eventType] - callback; onremoveeventtype (事件类型; 如何删除//侦听器(例如删除单个通用回调类型、后面的多个回调) publicstaticvoidremovemonitort (事件类型, CallbackT callback ) ) onremovemonitort )、callback t callback m _ event DIC [ event type ]=(callback t ) m _ event DIC [ event tor ] onremoveeventtype (事件类型; //广播事件消息(如果未加入回拨类型)发布事件类型{Delegate temDel; if (m _ event DIC.try getvalue (event type,out temDel ) ) callback callback=temdelascallback; If (客服!=空(呼叫后退); elsethrownewexception (string.format )广播事件错误:事件(中委托为空或不同类型的委托)。 () )。 事件类型; }//广播事件消息(对于单个通用回调类型,就像从后面的多个一样) { delegate temmy } if (m _ event DIC.try getvalue (event type,out temDel ) ) callbacktcallback=temdelascallbackt; If (客服!=null (呼叫后退(arg ) ); elsethrownewexception (string.format )广播事件错误:事件(中委托为空或不同类型的委托)。 () )。 事件类型; }隐私声明管理员(事件类型事件类型,删除呼叫) if (! m _ event DIC.contains key (event type ) ) m _ event DIC.add (event type,null ); elegatetemdel=m _ event DIC [ event type ]; if(temdel!=null temDel.GetType ()!=callback.GetType () (throw new exception (string.format ) )试图添加委托给拦截错误:事件,但当前事件委托)与要添加的委托类型)不同) ) ) ) ) ) ) ) )、事件类型,temDel.GetType (,callback.GetType ) ); }私有事件监视程序(事件类型事件类型,删除呼叫) if ) m_eventdic.containskey ) (事件类型) ) 删除if(temdel==null ) throw new exception (string.format )拦截错误:没有与事件{0}对应的委托。 ) ) )。 事件类型; elseif(temdel.gettype )!=callback.GetType () throw new exception (string.format ) )试图删除监听错误:事件)委托,但当前事件委托()是要删除的委托类型) ,eventType,temDel.GetType (,callback.GetType ) ); } elsethrownewexception (string.format )“删除监听错误:没有此事件代码。 ()、事件类型; }私有事件监视程序removeeventtype (事件类型) if ) m _ event DIC [事件类型]==null ) m_eventdic.remood }以下侦听器此外,不会因为缺少角色而报告错误。 没有广播者和听众也不会有影响。

//侦听器public class monitor 3360 mono behaviour { void awake (} { event center.addmonitorint (event type.example test1,test ) ) }void OnDestroy () eventcenter.removemonitorint ) ) eventtype.exampleTest1,test ); }privatevoidtest(intnum ) {Debug.Log )我被调用了) num ); //广播者公共类广播开始器{ void start (}//这里也体现了该方法的缺点。 ——广播时传递的参数必须与监听程序对应于事件的方法的参数类型匹配。 //但是,这里不能直接知道对应事件的参数类型,只能通过查找该事件或写说明书来解决。 事件中心. broadcast (event type.example test1,2 ); }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。