C#扩展方法的使用方法和理解
2014-09-24 18:10
330 查看
下面的示例演示为 System.String 类定义的一个扩展方法。
请注意,它是在非嵌套的、非泛型静态类内部定义的
WordCount 扩展方法置于范围中:
而且,可以使用以下语法从应用程序中调用该扩展方法:
---------------------------以下转来---------------------------------------------------------------
“扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。”
这是msdn上说的,也就是你可以对String,Int,DataRow,DataTable等这些类型的基础上增加一个或多个方法,使用时不需要去修改或编译类型本身的代码。
先做个例子吧,以String为例,需要在字符串类型中加一个从字符串转为数值的功能。
以往我们可能是这样做的,会专门写一个方法做过转换
?
调用就使用
?
若是String类型有一个名为ToInt()(从字符串转为数值)的方法,就可以这样调用了
?
这样看起来是不是更好,下面来看看具体怎么实现吧
第一步:
我先创建一个解决方案,一个web应用程序(webtest)及一个类库(W.Common)
在webtest项目添加引用W.Common项目
第二步:在类库中新建一个名为EString.cs类
?
看了上面的代码了吧,扩展方法规定类必须是一个静态类,EString是一个静态类,里面包含的所有方法都必须是静态方法。
msdn是这样规定扩展方法的:“扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。 它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。”
EString里有一个ToInt的静态方法,他接收一个自身参数this,类型为string,this string必须在方法参数的第一个位置。
这句话什么意思,即你需要对string扩展一个ToInt方法,this是string实例化后的对象,这可能说的不太清楚,我的表述能力能弱,不要见怪呀。。。通俗的说就是,扩展方法跟静态类的名称无关,只需要在一个静态类里面定义一个静态方法,第一个参数必须this string开头。
如果需要你要对DateTime类型扩展方法名为IsRange(判断是否在此时间范围内),代码如下:
?
这里的扩展方法是用this DateTime打头,那么就可以这样调用
?
当前代码在使用扩展方法前需要先引用命名空间
?
以上是我对扩展方法理解及使用,如有不对或不足的地方请多多指正,谢谢啦。。
这我第一次写文章算是排过版的,用好长时间呀,以前都只是看别人的文章,现在才知道写一篇好的文章真的不容易呀。
努力学习,坚持自己的梦想。
下面的示例演示为 System.String 类定义的一个扩展方法。
请注意,它是在非嵌套的、非泛型静态类内部定义的
namespace ExtensionMethods { public static class MyExtensions { public static int WordCount(this String str) { return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length; } } }可使用此 using 指令将
WordCount 扩展方法置于范围中:
using ExtensionMethods;
而且,可以使用以下语法从应用程序中调用该扩展方法:
string s = "Hello Extension Methods"; int i = s.WordCount();
---------------------------以下转来---------------------------------------------------------------
“扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。”
这是msdn上说的,也就是你可以对String,Int,DataRow,DataTable等这些类型的基础上增加一个或多个方法,使用时不需要去修改或编译类型本身的代码。
先做个例子吧,以String为例,需要在字符串类型中加一个从字符串转为数值的功能。
以往我们可能是这样做的,会专门写一个方法做过转换
?
?
?
第一步:
我先创建一个解决方案,一个web应用程序(webtest)及一个类库(W.Common)
在webtest项目添加引用W.Common项目
第二步:在类库中新建一个名为EString.cs类
?
msdn是这样规定扩展方法的:“扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。 它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。”
EString里有一个ToInt的静态方法,他接收一个自身参数this,类型为string,this string必须在方法参数的第一个位置。
这句话什么意思,即你需要对string扩展一个ToInt方法,this是string实例化后的对象,这可能说的不太清楚,我的表述能力能弱,不要见怪呀。。。通俗的说就是,扩展方法跟静态类的名称无关,只需要在一个静态类里面定义一个静态方法,第一个参数必须this string开头。
如果需要你要对DateTime类型扩展方法名为IsRange(判断是否在此时间范围内),代码如下:
?
?
?
这我第一次写文章算是排过版的,用好长时间呀,以前都只是看别人的文章,现在才知道写一篇好的文章真的不容易呀。
努力学习,坚持自己的梦想。
相关文章推荐
- 深入理解 c# 第一章 使用扩展方法对 List<Product> 排序
- C# 3.0新特性初步研究 Part2:使用扩展方法_C#教程
- c# 3.0新特性之使用扩展方法
- Unity使用C#高级特性扩展方法
- 【原创】开源Math.NET基础数学类库使用(12)C#随机数扩展方法
- C#扩展方法的理解
- 如何在IronPython中使用C#扩展方法
- 在C#中使用装饰器模式和扩展方法实现Fluent Interface
- C# this扩展方法的使用
- 【IEnumerable】扩展方法的使用 C#
- 编写高质量代码改善C#程序的157个建议——建议101:使用扩展方法,向现有类型“添加”方法
- 扩展无极限:工厂设计模式与C#扩展方法的结合使用
- C#扩展方法的理解
- 【原创】开源Math.NET基础数学类库使用(12)C#随机数扩展方法
- C# 3.0新特性初步研究 Part2:使用扩展方法_C#教程
- C# 扩展方法使用
- c#扩展方法使用说明
- 【KK学习笔记】c# 虚方法 virtual 、 重写方法 override 、new 的使用与理解
- 自定义扩展方法(集合泛型约束)超好用,这里理解方法当参数来使用
- 开源Math.NET基础数学类库使用(12)C#随机数扩展方法