你的位置:首页 > 软件开发 > ASP.net > C#扫盲之:带你掌握C#的扩展方法、以及探讨扩展方法的本质、注意事项

C#扫盲之:带你掌握C#的扩展方法、以及探讨扩展方法的本质、注意事项

发布时间:2016-03-31 23:34:18
1、为什么需要扩展方法 .NET3.5给我们提供了扩展方法的概念,它的功能是在不修改要添加类型的原有结构时,允许你为类或结构添加新方法。思考:那么究竟为什么需要扩展方法呢,为什么不直接修改原有类型呢?首先,假设我们的项目中有一个类,后来过了一段时间,我们明确的知道需要为该类添 ...

1、为什么需要扩展方法


 

.NET3.5给我们提供了扩展方法的概念,它的功能是在不修改要添加类型的原有结构时,允许你为类或结构添加新方法。

思考:那么究竟为什么需要扩展方法呢,为什么不直接修改原有类型呢?

首先,假设我们的项目中有一个类,后来过了一段时间,我们明确的知道需要为该类添加一个新功能,考虑这个需求有两个解决办法:

(1)直接修改当前类的定义

  这样做的缺点是,破坏向后的兼容性,可能以前使用的旧代码无法通过编译。比如说旧代码使用了一个Methed(int,int)的方法,但是为了满足新功能我们现在修改成了Methed(int,int,int),多增加了一个参数,这样原有的旧代码就无法通过编译。

(2)以当前类为基类进行派生,在子类中进行实现

  这样做也有缺点,那就是假如功能需要修改时,我们需要维护两个地方,一个是父类,一个是子类,增加了代码维护工作量

这时,新的特性扩展方法解决了以上两个问题,并且还解决了当有些类的实现是第三方的,我们无法修改源代码情况下,以及某些类是不可继承的,无法派生的,这两种情况下任然可以使用扩展方法来添加新功能。使用扩展方法,可以在不创建子类和直接修改类型的情况下修改类型。

 

2、扩展方法怎么用


 

2.1规则

定义扩展方法必须遵守两个Static和一个this

1.必须把扩展方法定义在静态类中,每个扩展方法也必须声明为静态的
2.所有扩展方法必须要使用this关键字对第一个参数进行修饰

 

 

扩展方法的实现如下图所示,我们要给StringBuilder系统类型扩展一个功能用于提取字符串对象中的某个字符的索引

C#扫盲之:带你掌握C#的扩展方法、以及探讨扩展方法的本质、注意事项

 

2.1在实例层次上调用扩展方法

在实例层次上调用扩展方法的意思就是,在被扩展对象的实例上进行调用而不是使用我们定义的静态类调用。具体怎样调用,请看一下代码。

C#扫盲之:带你掌握C#的扩展方法、以及探讨扩展方法的本质、注意事项C#扫盲之:带你掌握C#的扩展方法、以及探讨扩展方法的本质、注意事项
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ExStensionMethd{  class Program  {    static void Main(get='_blank'>string[] args)    {      StringBuilder tmpStr = new StringBuilder("12323");      Console.WriteLine(tmpStr.StringIndef('2'));//这里我们使用的是StringBuilder的实例tmpStr来直接调用      Console.ReadKey();    }  }  /// <summary>  /// 扩展方法静态类  /// </summary>  static class ExtionClass  {    public static int StringIndef(this StringBuilder str, char tmpChar)    {      int index = 0;      for (; index < str.Length; index++)      {        if (str[index].Equals(tmpChar))        {          return index;        }      }      return -1;    }  }}

原标题:C#扫盲之:带你掌握C#的扩展方法、以及探讨扩展方法的本质、注意事项

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录