WEB开发网
开发学院软件开发C语言 C#3.0语言新特性之扩展方法 阅读

C#3.0语言新特性之扩展方法

 2009-03-10 08:19:45 来源:WEB开发网   
核心提示:当我们需要对已有类的功能进行扩展时,我们通常会想到继承,C#3.0语言新特性之扩展方法,继承已有类,然后为其加入新的行为,扩展方法的第一个参数以this关键字开始,后跟被扩展的类型名,而C# 3.0中加入的扩展方法(Extension Methods)特性,则提供了另一种实现功能扩展的方式

当我们需要对已有类的功能进行扩展时,我们通常会想到继承,继承已有类,然后为其加入新的行为。而C# 3.0中加入的扩展方法(Extension Methods)特性,则提供了另一种实现功能扩展的方式。

扩展方法是一种特殊的静态方法,它定义在一个静态类中,但可以在其他类的对象上像调用实例方法那样进行调用。因此,通过扩展方法,我们就可以在不修改一个类型的前提下对一个类型进行功能上的扩充,这种方法并不会产生新的类型,而是采用向已有类中加入新方法的方式来完成功能扩展;同时,也可以将一些近似的类型中近似的功能同一实现在一个类中,便于阅读和维护。从最终效果上看,扩展方法使得扩展一个现有类型和构造一个具有附加方法的类型变成了现实。

20.3.1 定义扩展方法

在对已有类进行扩展时,我们需将所有扩展方法都写在一个静态类中,这个静态类就相当于存放扩展方法的容器,所有的扩展方法都可以写在这里面。

而且扩展方法采用一种全新的声明方式:

public static 返回类型 扩展方法名(this 要扩展的类型 参数名称 [,扩展方法参数列表]),

与普通方法声明方式不同,扩展方法的第一个参数以this关键字开始,后跟被扩展的类型名,然后才是真正的参数列表。如下面的示例是一个声明了两个扩展方法的静态类:

namespace C20_1

{

    public static class Extensions

    {

       public static int ToInt32(this string s)

        {

            return Int32.Parse(s);

        }

        public static T[] Slice<T>(this T[] source, int index, int count)

        {

            if (index < 0 || count < 0 || source.Length - index < count)

            {

                throw new ArgumentException("Argument Error Information.");

            }

            T[] result = new T[count];

            Array.Copy(source, index, result, 0, count);

            return result;

        }

    }

}

1 2 3  下一页

Tags:语言 特性 扩展

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接