`
isiqi
  • 浏览: 16045773 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

C# 扩展方法

 
阅读更多

扩展方法 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);
    }

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


分享到:
评论

相关推荐

    C#扩展方法

    C#扩展方法,实现模拟List的FindAll方法 实现了泛型的MyFindALl方法

    CSharpExtensionMethods:我的C#扩展方法

    C#扩展方法我的集合和POCO对象的C#扩展方法。 享受! :collision:您可以通过安装所有它们 :hammer:或最小包装。或必备包(首选)。目录:集合扩展方法(命名空间-Pylypeiev.Extensions):POCO扩展方法(名称空间-...

    C# Extension(扩展方法)

    C# Extension(扩展方法),LinqExtensions、类型转换扩展、日期时间扩展、格式化扩展、验证扩展、可空类型

    详解C#扩展方法原理及其使用

    主要介绍了C#扩展方法原理及其使用的的相关资料,文中代码非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下

    Z.ExtensionMethods, C# 扩展方法|. NET 开放源代码&免费库.zip

    Z.ExtensionMethods, C# 扩展方法|. NET 开放源代码&免费库 使用超过 1000种扩展方法,增强了. NET 架构。下载完整版本 NuGetZ.ExtensionMethods ( 推荐推荐) Z.ExtensionMethods.WithObjectNamespace

    C#扩展方法实例分析

    本文实例讲述了C#扩展方法。分享给大家供大家参考,具体如下: 扩展方法 扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但...

    C# 常用扩展方法

    开发日常使用帮助类扩展方法,仅供学习使用。。直接引用扩展使用

    c#中的扩展方法学习笔记

    最近在看王清培前辈的.NET框架设计时,当中有提到扩展方法 . 开头的一句话是:扩展方法是让我们在不改变类原有代码的情况下动态地添加方法的方式,这给面向对象设计 模块设计带来了质的提升 很明显,扩展方法在框架设计...

    C#中的扩展方法详解

    “扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。”这是msdn上说的,也就是你可以对String,Int,DataRow,DataTable等这些类型的基础上增加一个或多个方法,...

    C# 自定义扩展方法

    public static DataView AsDataView(this DataTable table, string selectText)

    天鹅:天鹅代表我们都需要的东西。 Unosquare的C#扩展方法和类的集合

    SWAN:我们都需要的东西(Unosquare的C#扩展方法和类的集合) :star: 如果您觉得该项目有用,请加注星标! SWAN代表我们都需要的东西 重复代码和重新发明轮子通常被认为是不好的做法。 在我们致力于提供精美的...

    C#获取并修改文件扩展名的方法

    本文实例讲述了C#获取并修改文件扩展名的方法。分享给大家供大家参考。具体分析如下: 这里使用C#编程的方法改变文件扩展名的文件,必须使用Path类。 Path类用来解析文件系统路径的各个部分。静态方法Path....

    简单介绍C# 中的扩展方法

    扩展方法是C#3.0引入的新特性,使用它,可以在不修改某一类的代码的情况下,实现该类方法的扩展。  为一个类添加扩展方法,需要三个要素:  1.扩展方法所在的类为静态类  2.扩展方法本身要为静态方法  3.扩展...

    C# 扩展方法小结

    主要介绍了C#的扩展方法的相关资料,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下

    C#扩展string类型方法

    C#扩展string类型方法,查找该字符串中含有另一个字符串的个数

    csharp-extensions:实用程序C#扩展方法的集合

    实用程序C#扩展方法的集合。 主要: 开发人员: 主要: 开发人员: nuget: Install-Package rm.Extensions 字符串扩展名: var s = " " ; if ( s . IsNullOrEmpty ()) { /**/ } if ( s . IsNullOrWhiteSpace ...

    c#代码控制扩展屏

    用c#代码来控制扩展屏,可以选择方向旋转,方便了扩展屏对于用户的使用;

    C#解析XML入门级别的实例代码

    实现C#各种情况下 解析XML文件 不要在为解析XML文件发愁了。

Global site tag (gtag.js) - Google Analytics