C# 扩展方法

本文详细介绍了C#中的扩展方法,包括如何为密封类及接口添加扩展方法,展示了通过静态类和静态方法实现对现有类型的功能增强。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

扩展方法 Extension Method.

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

举个例子:

    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类中所有的成员。

    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);
    }

上面实际的例子中可以看出,不仅可以对类进行扩展,对接口也可以进行扩展。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值