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

保定网站免费制作天津网站开发平台

保定网站免费制作,天津网站开发平台,上传wordpress到服务器要多久,品牌营销增长公司哪家好接上文 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/516295/

相关文章:

  • 贵州公明建设投资咨询有限公司官方网站小说网站开发对影成三人小说
  • 软件分享网站不一样的婚恋网站怎么做
  • 如何维护给做网站的客户公司变更名称和经营范围
  • 网站建设维护php建站最好的公司排名
  • 济南1951年建站wordpress 描述
  • 政务网站建设信息嵊州网站制作
  • 我的网站突然找不到网页了seo是啥意思
  • 黑河做网站的公司平面设计现在怎么样
  • 银川网站建站中国建设银行人力资源网站
  • 建设部考试中心网站用自己的ip怎么查看dw8建设的网站
  • 九江网站建设九江商标设计网页
  • 网站建设资格预审公告附近广告设计与制作门店电话
  • 百度权重站长工具网页制作工具哪些好用
  • 关键词整站优化公司网站店招用什么软件做的
  • 租车网站模版广州市网站建设 骏域
  • 关闭网站怎么不保存我做的更改人工智能专业
  • ui中有哪些做的好看的网站简单logo设计
  • 深圳大型网站设计公司校园 网站建设 知乎
  • 西部数码网站流量怎么充优化网站界面的工具
  • 街区网站建设东阳市住房和城乡建设局网站
  • 怎样建设网站是什么网站代码制作软件
  • 成华区微信网站建设计公司加盟
  • 找个男做那个视频网站好高端网站建设公司
  • 做网站 毕业设计广东手机网页制作
  • 沈阳口碑最好的男科医院seo排名优化什么意思
  • 光谷做网站推广价格手机网站 教程
  • 泉州做网站多少钱关键词排名快照优化
  • 威海网站建设费用网站不能调用样式
  • 网站链接建设及引流营销世界500强企业中国有几家
  • 哪个网站做网络推好推广引流的10个渠道