zoukankan      html  css  js  c++  java
  • C#3.0中的扩展方法

    Technorati 标签: 扩展方法

        在实际应用中,开发者完成代码的编译后,除非重新编译更改后的代码,否则开发者很难在原有代码中添加新的功能.

        在C#3.0中,提供了一个扩展方法的新特性,可以使得开发者在编译后的程序集里边添加相关的方法,从而很容易地扩展原有的功能.

    1、扩展方法的定义

    定义扩展方法时,首先这个扩展方法要被定义在一个静态类 中(程序集加载时自动加载),因此这个扩展方法也必须是一个静态方法。其次,在扩展方法的参数列表中,需要在第一个参数类型的前面添加关键字this作为修饰符,而紧跟其后的就是扩展类的名称。如下所示:

    代码:扩展方法的定义

        static class MyExtensions
        {
            public static string  GetAssemblyName(this object obj)
            { 
                return obj.GetType().Name;
            }
        }

    在上述代码中,定义了一个静态类MyExtension,其中定义了一个扩展方法GetAssemblyName()。在该方法的参数列表中,使用了关键字this来修饰object类型,将扩展方法与object相关联。因此,对于任何object对象和继承了object类的类,都可以使用GetAssemblyName()方法,从而扩展了object的方法。

    2、扩展方法的使用

        使用扩展方法,既可以调用关联类型实例化对象的扩展方法,也可以直接调用静态类中的扩展方法,其中的方法参数输入关联类型。

    代码: 实例化对象的扩展方法

            static void Main(string[] args)
            {
                object obj = new object();
                obj.GetAssemblyName();
            }
    

    在代码中,定义了一个object类型的参数obj,并调用obj类型的扩展方法GetAssemblyName,获取Assembly的名称.

    当书写代码时,在VS环境中,开发者可以利用只能感知功能,比较容易地选择扩展方法.如下图所示:

    扩展方法

    此外还可以针对泛型类型添加扩展方法,这样开发者就可以在制定的泛型类中使用扩展方法。俺还不是很理解泛型,暂时不显摆了。


    Technorati 标签: 扩展方法
  • 相关阅读:
    C++实现单例模式
    进程间通信(IPC)介绍
    Python装饰器
    Python中import的使用
    Python中is和==的区别
    SK-Learn使用NMF(非负矩阵分解)和LDA(隐含狄利克雷分布)进行话题抽取
    Focal Loss for Dense Object Detection
    YOLOv3: An Incremental Improvement
    YOLO9000: Better, Faster, Stronger
    You Only Look Once: Unified, Real-Time Object Detection
  • 原文地址:https://www.cnblogs.com/zyqgold/p/1883481.html
Copyright © 2011-2022 走看看