您的位置:首页 > 编程语言 > C#

关于C#扩展方法介绍

2012-08-15 14:11 1021 查看
扩展方法 Extension Method.

这个可以用在,比方有一个密封类,你不能修改它,但你又想对它继承或者扩展,这个时候就可以用到扩展方法了。

举个例子:

Csharp代码


class Program

{

static void Main(string[] args)

{

SealedClass x = new SealedClass();

Console.WriteLine(x.TestMethod());

}

}

sealed class SealedClass

{

}

static class SealedClassExtension

{

public static string TestMethod(this SealedClass x)

{

return "";

}

}

在上面的例子中,可以看出,要定义方法,需要做以下几件事:

(1) 定义个扩展类;这个类必须是静态类,static的

(2) 定义扩展方法;这个方法也必须是静态的

(3) 该扩展方法的语法比较奇怪,第一个参数是被扩展的类,而且前边必须用个this关键字

下面再举一个例子。

我们经常使用到执行了IEnumerable<T>的容器,比如说List<T>。这些容器因为执行了IEnumerable<T>接口,所以都能使用一些方法,比如Aggregate。

如果去看IEnumerable<T>接口的定义,并没有包含Aggregate方法,所以Aggregate实际是一个扩展方法。

它是在静态类Enumerable中定义的。下面看一下,当然没有完全列出Enumerable类中所有的成员。

Csharp代码


public static class Enumerable

{

public static TSource Aggregate<TSource>(this IEnumerable<TSource> source, Func<TSource, TSource, TSource> func);

public static TAccumulate Aggregate<TSource, TAccumulate>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func);

public static TResult Aggregate<TSource, TAccumulate, TResult>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func, Func<TAccumulate, TResult> resultSelector);

}

上面实际的例子中可以看出,不仅可以对类进行扩展,对接口也可以进行扩展。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: