首页 > 学院 > 开发设计 > 正文

c#扩展方法-摘自msdn

2019-11-17 02:33:35
字体:
来源:转载
供稿:网友
c#扩展方法-摘自msdn

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

扩展方法编写代码:

namespace ExtensionMethods{    public static class MyExtensions    {        public static int WordCount(this String str)        {            return str.Split(new char[] { ' ', '.', '?' },                              StringSplitOptions.RemoveEmptyEntries).Length;        }    }   }

1.必需为静态方法

2.第一个参数为向哪个类型添加扩展方法(this 类型名称 形参名称)

调用时引入命名空间:

using ExtensionMethods;

调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异:

string s = "Hello Extension Methods";int i = s.WordCount();

注意:在代码中,可以使用实例方法语法调用该扩展方法。 但是,编译器生成的中间语言 (IL) 会将代码转换为对静态方法的调用。 因此,并未真正违反封装原则。 实际上,扩展方法无法访问它们所扩展的类型中的私有变量。

可以使用扩展方法来扩展类或接口,但不能重写扩展方法。与接口或类方法具有相同名称和签名的扩展方法永远不会被调用。 编译时,扩展方法的优先级总是比类型本身中定义的实例方法低。 换句话说,如果某个类型具有一个名为PRocess(int i)的方法,而你有一个具有相同签名的扩展方法,则编译器总是绑定到该实例方法。当编译器遇到方法调用时,它首先在该类型的实例方法中寻找匹配的方法。 如果未找到任何匹配方法,编译器将搜索为该类型定义的任何扩展方法,并且绑定到它找到的第一个扩展方法。

通常,建议你只在不得已的情况下才实现扩展方法,并谨慎地实现。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表