C#扩展方法

扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。     

扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。  对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。

扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。            

它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。  仅当你使用 using 指令将命名空间显式导入到源代码中之后,扩展方法才位于范围中。

static  class Class1
    {
        public static int ToInt(this string strValue)
        {
            try
            {
                return int.Parse(strValue);
            }
            catch
            {
                return 0;
            }
        }
        public static DataTable ToDataTable(this string s)
        {
            DataTable dt = new DataTable();
            return dt;
        }
  

    }

 

通常,建议你只在不得已的情况下才实现扩展方法,并谨慎地实现。              
只要有可能,必须扩展现有类型的客户端代码都应该通过创建从现有类型派生的新类型来达到这一目的。  有关详细信息,请参阅继承(C# 编程指南) 

在使用扩展方法来扩展你无法更改其源代码的类型时,你需要承受该类型实现中的更改会导致扩展方法失效的风险。                       

如果你确实为给定类型实现了扩展方法,请记住以下几点:                       

  • 如果扩展方法与该类型中定义的方法具有相同的签名,则扩展方法永远不会被调用。                               

  • 在命名空间级别将扩展方法置于范围中。                  

  • 例如,如果你在一个名为 Extensions 的命名空间中具有多个包含扩展方法的静态类,则这些扩展方法将全部由 using Extensions; 指令置于范围中。 

针对已实现的类库,不应为了避免程序集的版本号递增而使用扩展方法。              

如果要向你拥有源代码的库中添加重要功能,应遵循适用于程序集版本控制的标准 .NET Framework 准则。  有关详细信息,请参阅程序集版本控制

posted @ 2014-10-22 15:24  code_dream  阅读(277)  评论(0)    收藏  举报