当前位置: 首页 > news >正文

晋江网站建设价格百度seo关键词排名优化教程

晋江网站建设价格,百度seo关键词排名优化教程,资兴市住房和城乡建设局网站,中国电信收购腾讯接上文 IOC 容器是一个很方便的模块管理工具。 除了可以用来注册和获取模块#xff0c;IOC 容器一般还会有一个隐藏的功能#xff0c;即#xff1a; 注册接口模块 抽象-实现 这种形式注册和获取对象的方式是符合依赖倒置原则的。 依赖倒置原则#xff08;Dependence I…接上文 IOC 容器是一个很方便的模块管理工具。 除了可以用来注册和获取模块IOC 容器一般还会有一个隐藏的功能即 注册接口模块 抽象-实现 这种形式注册和获取对象的方式是符合依赖倒置原则的。 依赖倒置原则Dependence Inversion Principle程序要依赖于抽象接口不要依赖于具体实现。 好处如下 接口设计与实现分成两个步骤接口设计时可以专注于设计实现时可以专注于实现。接口设计时专注于设计可以减少系统设计时的干扰。实现是可以替换的比如一个接口叫 IStorage其实现可以是 PlayerPrefsStorage、EasySaveStorage、EdtiroPrefsStorage等切换时候只需要一行代码就可以切换了。比较容易测试单元测试等当实现细节比如 PlayerPrefsStorage发生变化时其引用接口比如 IStorage类里的代码不会跟着改变降低耦合。等等 支持数据存储 接口的阉割技术 利用 C# 接口的显示实现来达到接口方法在子类阉割的目的而要想调用这个方法必须通过接口而不是方法所在的对象。 using UnityEngine;namespace FrameworkDesign.Example {/// summary/// 1. 定义接口/// /summarypublic interface ICanSayHello{void SayHello();void SayOther();}public class InterfaceDesignExample : MonoBehaviour,ICanSayHello{/// summary/// 接口的隐式实现/// /summarypublic void SayHello(){Debug.Log(Hello);}/// summary/// 接口的显式实现/// /summaryvoid ICanSayHello.SayOther(){Debug.Log(Other);}// Start is called before the first frame updatevoid Start(){// 隐式实现的方法可以直接通过对象调用this.SayHello();// 显式实现的接口不能通过对象调用// this.SayOther() // 会报编译错误// 显式实现的接口必须通过接口对象调用(this as ICanSayHello).SayOther();}} } // 显式实现的方法必须通过接口对象调用             (this as ICanSayHello).SayOther(); 如果要想调用一个对象的显式实现的方法那么必须要将此对象强制转换成接口对象才能调用这样就增加了调用显式实现的方法的成本所以可以理解为这个方法被阉割了。 使用案例 1  接口-抽象类-实现类的结构 第一种就是比较常见的 接口-抽象类-实现类的结构示例代码如下 using UnityEngine;namespace FrameworkDesign.Example {public class InterfaceStructExample : MonoBehaviour{/// summary/// 接口/// /summarypublic interface ICustomScript{void Start();void Update();void Destroy();}/// summary/// 抽象类/// /summarypublic abstract class CustomScript : ICustomScript{protected bool mStarted { get; private set; }protected bool mDestroyed { get; private set; }/// summary/// 不希望子类访问 Start 方法因为有可能破坏状态/// /summaryvoid ICustomScript.Start(){OnStart();mStarted true;}void ICustomScript.Update(){OnUpdate();}void ICustomScript.Destroy(){OnDestroy();mDestroyed true;}/// summary/// 希望子类实现 OnStart 方法/// /summaryprotected abstract void OnStart();protected abstract void OnUpdate();protected abstract void OnDestroy();}/// summary/// 由用户扩展的类/// /summarypublic class MyScript : CustomScript{protected override void OnStart(){Debug.Log(MyScript:OnStart);}protected override void OnUpdate(){Debug.Log(MyScript:OnUpdate);}protected override void OnDestroy(){Debug.Log(MyScript:OnDestroy);}}/// summary/// 测试脚本/// /summaryprivate void Start(){ICustomScript script new MyScript();script.Start();script.Update();script.Destroy();}} } 第二个使用案例     接口 扩展时用于限制方法的访问规则 using UnityEngine;namespace FrameworkDesign.Example {public class CanDoEveryThing {public void DoSomething1(){Debug.Log(DoSomething1);}public void DoSomething2(){Debug.Log(DoSomething2);}public void DoSomething3(){Debug.Log(DoSomething3);}}public interface IHasEveryThing{CanDoEveryThing CanDoEveryThing { get; }}public interface ICanDoSomething1 : IHasEveryThing{}public static class ICanDoSomeThing1Extensions{public static void DoSomething1(this ICanDoSomething1 self){self.CanDoEveryThing.DoSomething1();}}public interface ICanDoSomething2 : IHasEveryThing{}public static class ICanDoSomeThing2Extensions{public static void DoSomething2(this ICanDoSomething2 self){self.CanDoEveryThing.DoSomething2();}}public interface ICanDoSomething3 : IHasEveryThing{}public static class ICanDoSomeThing3Extensions{public static void DoSomething3(this ICanDoSomething3 self){self.CanDoEveryThing.DoSomething3();}}public class InterfaceRuleExample : MonoBehaviour{public class OnlyCanDo1 : ICanDoSomething1{CanDoEveryThing IHasEveryThing.CanDoEveryThing { get; } new CanDoEveryThing();}public class OnlyCanDo23 : ICanDoSomething2,ICanDoSomething3{CanDoEveryThing IHasEveryThing.CanDoEveryThing { get; } new CanDoEveryThing();}private void Start(){var onlyCanDo1 new OnlyCanDo1();// 可以调用 DoSomething1onlyCanDo1.DoSomething1();// 不能调用 DoSomething2 和 3 会报编译错误// onlyCanDo1.DoSomething2();// onlyCanDo1.DoSomething3();var onlyCanDo23 new OnlyCanDo23();// 不可以调用 DoSomething1 会报编译错误// onlyCanDo23.DoSomething1();// 可以调用 DoSomething2 和 3onlyCanDo23.DoSomething2();onlyCanDo23.DoSomething3();}} } 总结一下 接口的阉割技术核心的知识是接口的显式实现接口抽象类具体类 时不想被乱调用一些方法时可以用接口阉割技术。接口静态扩展时想要通过实现某个接口来获得具体方法的访问权限时可以用接口阉割技术。
http://www.pierceye.com/news/976054/

相关文章:

  • 网站备案一个主体无锡建设银行网站
  • delphi xe10网站开发台州做网站多少钱
  • 怎样设计卖奖的网站做电影网站哪个服务器好
  • 找外包公司做网站的好处和坏处wordpress 访问量大
  • 淄博 网站设计越秀公司网站建设
  • 网站该如何做本地网站搭建软件
  • 如何做汽车团购网站学做馒头面包哪个网站好
  • 中国科技成就总结莱芜网站优化排名公司
  • 中国建设银行网站企业网银收费北京网站建设小程序开发
  • 成交型网站倡导公司网络营销课程总结1000字
  • 网站建设注册前端开发培训机构推荐
  • 遵义网站推广中国房地产app下载安装最新版
  • c语言网站建设禅城网站开发
  • 宁波品牌网站制作哪家好太平阳电脑网网站模板
  • seo网站外链工具看设计比较好的网站
  • 济南道驰网站建设有限公司怎么样某网站网站的设计与实现
  • 服装印花图案设计网站设计一个网站要多久
  • ai怎么做自己的网站getpage wordpress使用详解
  • 龙岩做网站推广龙岗网站 建设深圳信科
  • 沈阳网站建设 网络服务广告公司首页
  • 旅游网站建设导航栏中国哪里正在大开发大建设
  • 哪能建设网站建设网站需要哪些流程图
  • 网站YYQQ建设o2o型网站
  • 给客户做网站 赚钱吗赣州省住房和城乡建设厅网站
  • 营销优化型网站怎么做手机app网页制作
  • 上海网站建设服wordpress友情链接排序
  • 沈阳市和平区网站建设编程课适合多大孩子学
  • 东阳网站优化懒人图库
  • 马关县网站建设专注营销型网站建设
  • 微信公众号公众平台太原seo关键词优化