您的位置:首页 > 编程语言 > C#

C#类的扩展

2015-07-18 12:08 288 查看
扩展方法使你能够向现有类型“添加”方法(oc的类目与此相似),而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。

扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。 它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。

下面的示例演示为 String 类定义的一个扩展方法。 请注意,它是在非嵌套的、非泛型静态类内部定义的:

public static class ExtensionMethods
{
//查找字符串中某个字符点个数
public static int FindCharCount (this string str, char ch)
{
int count = 0;
foreach (char c in str) {
if (c == ch) {
count ++;
}
}
return count;
}
}


上述为string 类添加了一个扩展方法,主要用于查询某个字符串中有多少个指定字符;

可以这样使用:

string str = "abcaaa";
int count = str.FindCharCount('a');
输出count 为4;

扩展方法是在编译时被绑定的:

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

参考:https://msdn.microsoft.com/zh-cn/library/bb383977.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: