zoukankan      html  css  js  c++  java
  • 扩展方法的快速理解

    ---恢复内容开始---

        今天记录一下自己对扩展方法的理解,扩展方法就是实现某种功能但是在原有的类或程序集中又不存在这种功能实现的方法或者封装,继而衍生出扩展方法。但是新建一个类来封装实现这种功能的方法也可以达到目的而且使用继承机制也可以实现,为何有衍生扩展方法呢?

        

    1. 第一种方式是比较通用的一种方式,也是通常情况下使用最多的,但和扩展方法比较来说,代码的可读性不如扩展方法。
    2. 继承的方式是一个很好的扩展方案,但有时不一定是完美的,比如:a. 每次继承都会产生新类,且使用时需要进行相应的强制转换(string=>MyString),b. 有些类本身设计为密封类,是不允许被继承的,如上所使用的例子string是不允许被继承的,所以第二种方案是不可行的。这时,第三种方案扩展方法就派上用场了。

      所以扩展方法登场可以完美的解决以上两种机制所产生或者遗留的问题和不足,进一步了解扩展方法的用法吧!

      声明扩展方法必须符合以下特性:

    1. 该方法必须声明在静态类中且方法类型为静态方法
    2. 方法的第一个参数类型是可扩展的类型
    3. 第一个参数需加this关键字

      写个demo来看看:

    namespace zhengze
    {
        public static class Myarr
        {
            public static int GetAdd(this int[] arr)
            {
                int max = 0;
                for (int i = 0; i < arr.Length; i++)
                {
                    max += arr[i];
                }
                return max;
            }
        }
    }

    然后调用方式:

    namespace zhengze
    {
        class Program
        {
            public static void Main(string[] args)
            {
                
                int[] arr = {1,3,5,7 };
    
                Console.WriteLine(arr.GetAdd());
            }
        }
    }

    这样我的一个简单的扩展方法就完成了。如何识别一个扩展方法:

    1. 第一个参数类型为this的方法
    2. 方法图标标有下标箭头

    以上内容有部分来自于园友http://home.cnblogs.com/u/codelir/博客。本章内容只是供自己理解复习加深记忆,有不足的地方请指出!---献给第二次的自己

    ---恢复内容结束---

  • 相关阅读:
    echarts仪表盘如何设置图例(legend)
    js上传限制文件大小
    js下载文件及命名(兼容多浏览器)
    为什么每个浏览器都有Mozilla字样(转载于知乎shadow)
    用JS做一个简单的电商产品放大镜功能
    unity下跨平台excel读写
    无限大地图:lightmap拆分
    Unity 打包总结和资源的优化和处理
    Unity3d: 资源释放时存储空间不足引发的思考和遇到的问题
    profiler内存优化:警惕回调函数
  • 原文地址:https://www.cnblogs.com/ymcome/p/5328682.html
Copyright © 2011-2022 走看看