首页 > 其他分享 >技术笔记(3)扩展方法

技术笔记(3)扩展方法

时间:2024-03-06 19:56:04浏览次数:25  
标签:扩展 笔记 static 类型 方法 public GetSystem

技术笔记(3)扩展方法

  • 希望实现的功能或目标:

    • 继续学习MMORPG游戏开发的框架
    • 了解扩展方法

  • 学习笔记:

    • CanGetLayersExtension类

      • 扩展方法GetSystem:

        • public static T GetSystem<T>(this ICanGetSystem self) where T : class,ISystem
          {
              return StartArchitecture.Instance.GetArchitecture().GetSystem<T>();
          }
          
      • 扩展方法GetModel(同上)

      • 扩展方法GetUtility(同上)

  • 实现过程中产生的疑惑:

    • 什么是扩展方法?VS是怎么识别扩展方法的?
    • 为什么要写扩展方法?有什么好处?直接去改那个类不行吗?

  • 对疑惑的解答:

    • 扩展方法

      • 定义:为一种特殊的静态方法,它是在不改变原有类型源码的情况下,为该类型的实例提供新的成员方法。

      • 作用:为一个类或接口增加辅助功能,优化类的设计,简化代码,重用逻辑等。

      • 条件:

        • 扩展方法所在的类必须是静态类
        • 扩展方法本身必须是静态方法
        • 扩展方法第一个参数必须使用this关键字修饰,表示要扩展的类型
      • 举例:

        • 扩展方法定义:

          • namespace ExtensionMethods
            {
                public static class MyExtensions
                {
                    public static int WordCount(this string str)
                    {
                        return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
                    }
                }
            }
            
        • 扩展方法调用:

          • using ExtensionMethods;
            
            string s = "Hello Extension Methods";
            int i = s.WordCount(); // i = 3
            
      • 注意事项:

        • 扩展方法优先级低于类型本身的实例方法
        • 尽量避免与原类型在同一命名空间下,避免污染原类型

日期:3.5

标签:扩展,笔记,static,类型,方法,public,GetSystem
From: https://www.cnblogs.com/bqza000/p/18057408

相关文章

  • 技术笔记(2)MMORPG架构
    技术笔记(2)MMORPG架构希望实现的功能或目标:一个功能完整的接近商业案例的MMORPG游戏项目搭建起该游戏项目的基本架构‍学习笔记:IOCContainer类用以保存所有层级以及各个模块的实例实例字典​privateDictionary<Type,object>instancesDict=newDictiona......
  • VS 2022支持 .NET Framework 4.5的方法
    默认VisualStudio2022不再支持安装.NETFramework4.5组件不想装vs2019,你可以尝试如下办法:1.nuget下载4.5安装包嫌官网下载慢的可以从下方下载.net4.5https://pan.xunlei.com/s/VNsIXaGlTDlArzgWx_sYmy7tA1?pwd=s339#提取码:s339.net4.5.1https://pan.xunlei.com/s/......
  • XXL-JOB 使用笔记(附代码)
    一:分布式调度系统对比开源产品对比:Quartz缺点: 1、不支持任务编排,无可视化编配页面 2、与业务高度耦合,系统侵入性严重 3.调度逻辑和QuartzJobBean耦合在同一个项目中,任务增加会导致系统性能瓶颈 4.quartz底层以“抢占式”获取DB锁并由抢占成功节点负责运行任务,会导......
  • 线性代数——平面向量 学习笔记
    线性代数——平面向量学习笔记首发于洛谷。定义及用语说明无特殊说明,下文的向量均指自由向量且是平面向量。向量,英文名为vector,目前没有准确而统一的中文翻译。在物理学科,一般翻译成「矢量」,且与「标量」一词相对。在数学学科,一般直接翻译成「向量」。对于向量的乘法:......
  • Vue学习笔记3--组件嵌套
    组件嵌套示例一:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>非单文件组件--全局注册</tit......
  • XQuartz 使用方法
    XQuartz就是macOS下的X11,部分Linux程序安装时需使用到图形界面,可以选择这个解决方案。安装:brewinstall--caskxquartz安装之后,在终端输入xquartz应该就能启动XQuartz:xquartz启动之后没有什么效果,只是能从程序坞看到有程序被打开了。此时打开一个新的终端页面,输......
  • NGUI学习笔记4.0
    EventListener和EventTrigger控件自带组件的局限性其实我们常见的复合控件只提供一些简单的事件监听,如按钮有点击抬起的监听,对长按等其他交互方式的事件监听不大支持。NGUI的监听函数给NGUI对象添加Collider,在其挂载的脚本中编写对应的NGUI的函数,在运行时候会通过反射来进行匹......
  • 数据类型内置方法(1)
    2024.3.5数据类型内置方法1.数字类型内置id不变值可变,即在原值的基础上修改,则为可变数据类型;值变id也变,即重新申请一个空间放入新值,则为不可变数据类型age=19print(f'first:{id(age)}')age=20print(f'second:{id(age)}')first:4384901776second:4384901808可以使......
  • Mybatis学习笔记
    Mybatis代码Mybatis入门https://mybatis.net.cn/getting-started.html写一个Mybatis项目1、新建一个Maven项目2、导入依赖集<!--导入依赖--><dependencies><!--mysql驱动--><dependency><groupId>mysql</groupId>......
  • pandas笔记(二)-- 从不订购的顾客 (数据表连接,主键与外键)
    题目描述找出所有从不点任何东西的顾客,以任意顺序返回结果测试用例输入Customerstable:idname1Joe2Henry3Sam4MaxOrderstable:idcustomerId1321输出CustomersHenryMax解析数据表连接的问题核心在于连接......