C#类的扩展
2015-07-18 12:08
288 查看
扩展方法使你能够向现有类型“添加”方法(oc的类目与此相似),而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。
扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。 它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。
下面的示例演示为 String 类定义的一个扩展方法。 请注意,它是在非嵌套的、非泛型静态类内部定义的:
上述为string 类添加了一个扩展方法,主要用于查询某个字符串中有多少个指定字符;
可以这样使用:
扩展方法是在编译时被绑定的:
可以使用扩展方法来扩展类或接口,但不能重写扩展方法。 与接口或类方法具有相同名称和签名的扩展方法永远不会被调用。 编译时,扩展方法的优先级总是比类型本身中定义的实例方法低。 换句话说,如果某个类型具有一个名为 Process(int i) 的方法,而你有一个具有相同签名的扩展方法,则编译器总是绑定到该实例方法。 当编译器遇到方法调用时,它首先在该类型的实例方法中寻找匹配的方法。 如果未找到任何匹配方法,编译器将搜索为该类型定义的任何扩展方法,并且绑定到它找到的第一个扩展方法。
参考:https://msdn.microsoft.com/zh-cn/library/bb383977.aspx
扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。 它们的第一个参数指定该方法作用于哪个类型,并且该参数以 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
相关文章推荐
- C#异步调用的好处和方法
- C# 中的委托和事件
- C#泛型详解
- C#参数类型 params、out和ref
- 在C#中ParameterizedThreadStart和ThreadStart区别
- C#不定参数函数
- C#中Invoke的用法(转)
- C#中Thread.IsBackground 属性
- C# goto 语句
- C# DataTable中返回列中的最大值
- C# DataTable中返回列中的最大值
- C#中按指定质量保存图片的实例代码 24位深度
- C#中 ArrayList与string,string[],List<string> 数组集合转换
- 集合中取出列名相同的,并把其他列的值合并成数组
- C#时间戳和时间互转
- C# 中通过CancellationTokenSource实现对超时任务的取消
- C# set get
- 【C#笔记】控件数组与事件
- C#异步执行任务的方法
- C# 百度语音合成