(转)C# -- 扩展方法的应用(Extension Methods)

本文转载自:http://blog.csdn.net/zxz414644665/article/details/9793205

当你有下面这样一个需求的时候,扩展方法就会起到作用:在项目中,类A需要添加功能,我们想到的就是在类A中添加公共方法,这个显而易见肯定可以,但是由于某种原因,你不能修改类A本身的代码,但是确实又需要增加功能到类A中去,怎么办? 这个时候扩展方法(Extension Methods)就会帮助你完成上述功能了。现在举例如下:

类A:简单起见,类A中只有一个自己的方法。

using System;

namespace TestApp.Method
{
    public class Test
    {
        public void TestMethod()
        {
            Console.WriteLine("public void TestMethod()");
        }
    }
}

现在我需要让类A添加一个方法,但是又不能修改类A,好,那我们就添加一个扩展方法(Extension Methods)如下:

using System;
using TestApp.Method;

namespace TestApp.ExtensionMethod
{
    public static class ExtendClass
    {
        public static void ExtendMethod(this Test test)
        {
            Console.WriteLine("test.ExtendMethod()");
        }
    }
}

其实,扩展方法(Extension Methods)当然需要一个类包装,所以我们必须得有一个类,请注意,这个类必须是静态类,另外扩展方法(Extension Methods)必须也是静态方法,方法的参数中必须要有被扩展类作为其中一个参数,此参数前面用this关键字修饰。

好了,这样我们的扩展就算完成了,下面我们就可以通过类A的实例来调用这个扩展方法了,如下:

using System;
using TestApp.ExtensionMethod;
using TestApp.Method;

namespace TestApp
{
        static void Main(string[] args)
        {
            Test test = new Test();
            test.TestMethod();      // Call the method of itself
            test.ExtendMethod();    // Call the extension method
         }
}

这里只要using扩展方法(Extension Methods)所在命名空间既可以通过类A的实例来调用这个扩展方法(Extension Methods)了。

另外MSDN有一篇文章专门讲这个的,大家可以去看看: Extension Methods 。

时间: 2024-10-01 03:49:41

(转)C# -- 扩展方法的应用(Extension Methods)的相关文章

创建过滤扩展方法 Creating Filtering Extension Methods 精通ASP-NET-MVC-5-弗瑞曼 Listing 4-17

Extension Methods(扩展方法)

在 OOPL 中,有静态方法.实例方法和虚方法,如下: public sealed class String { public static bool  IsNullOrEmpty(string s) { // ... } public string Replace(string old, string new) { // ... } } public abstract class Stream { public virtual void WriteByte(byte value) { // .

Unity3d的C#扩展方法Extension methods应用吧

扩展方法的条件: 必须声明为静态类 必须声明为静态方法 方法的第一个参数为this 首先来扩展Unity中的协程Coroutine, using UnityEngine; using System.Collections; using System; /// <summary> /// a set of extension methods meant help with common coroutine cases. Example : /// <code> /// void On

C# 扩展方法Extension Method

C# .NET Framewoke 3.0就引入的新特性,提供了扩展.NET类方法的途径,可以增加代码的美观性! 编写扩展方法有下面几个要求: 扩展方法所在的类必须是全局的,不能是内部嵌套类, 扩展方法的类必须是静态类. 扩展方法必须是静态方法. 扩展方法的第一个参数的数据类型必须是要扩展类型且使用this关键字. 扩展方法定义: public static class CExLongMethed { //无参无返回值 public static void Print(this long l)

ABP框架源码中的Linq扩展方法

文件目录:aspnetboilerplate-dev\aspnetboilerplate-dev\src\Abp\Collections\Extensions\EnumerableExtensions.cs using System; using System.Collections.Generic; using System.Linq; namespace Abp.Collections.Extensions { /// <summary> /// Extension methods for

C#原始类型扩展方法—this参数修饰符

扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用.对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异. 扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的.它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀.仅当您使用 using 指令将命名空间显式导入到源代码中之后,扩

扩展方法(为那些已经写好不能修改源码的类添加方法)

参考:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/how-to-implement-and-call-a-custom-extension-method 本主题介绍如何实现 .NET Framework 类库 中任意类型的扩展方法,或是你想要扩展的任何其他 .NET 类型. 客户端代码可以通过以下方法使用扩展方法,添加包含这些扩展方法的 DLL 的引用,以及添加 usin

c#扩展方法-摘自msdn

扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用.  对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异. 扩展方法编写代码: namespace ExtensionMethods { public static class MyExtensions { public static int WordCoun

C#当中的扩展方法

先说有用的,c#扩展方法结论: 扩展方法能够向现有类型"添加"方法,而无需创建新的派生类型,重新编译或以其他方式修改原始类型.扩展方法必须是静态方法,可以像实例方法一样进行调用.且调用同名中实际定义的方法优先级要高于扩展方法. 先来个简单的例子: public static class test { public static int CountYourNumber(this string str) { return str.Split(new char[] {' ','.','?'