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/博客。本章内容只是供自己理解复习加深记忆,有不足的地方请指出!---献给第二次的自己

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

  • 相关阅读:
    WCF+EntityFramework+mysql总结
    实现Win7远程桌面关机和重启
    EF 4.1 一些操作
    Ado.net利用反射执行SQL得到实体
    .net IL 指令速查
    VS2010 /VC/bin/rcdll.dll 无法找到资源编译器
    Win7下 httpRequest带证书请求https网站
    VS2010 自动关闭的问题解决方法
    Android 之 悬浮窗口
    论 Java 中获取一组不重复的随机数之性能问题
  • 原文地址:https://www.cnblogs.com/ymcome/p/5328682.html
Copyright © 2011-2022 走看看