All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
C#教程: 控制鼠标操作使用实例
Linux系统下PhpMyAdmin目录的安全管理_php资料_编程技术
在,ASP.NET,中用匿名委托简单模拟,AOP,做异常和日志处理_.net资料_编程技术
Asp.net,2.0,C#实现压缩解压功能
标题太长用省略号来代替简单办法_[Asp.Net教程]
利用继承来制作点击提交按钮后按钮变灰_[Asp.Net教程]
Windows下Apache+Tomcat+MySQL+jsp+php的服务器整合配置经验总结_[PHP教程]
PHP技巧:PHP文件系统基本操作类_[PHP教程]
WebService,服务和ajax,使用教程一例_.net资料_编程技术
delphi复选框组件(TCheckBox)使用方法详解
Reading number is top 10 pictures
看看什么叫美景
真正的国产-非模拍 贵在是真实1
含苞欲放的素颜美少女3
Perfect small Laurie1
银行20年后可能消失
The hot big eye big breast beauty1
男人,就要活出棱角
A beautiful girl to bud2
男人巳快沦落成动物了
Sora aoi on twitter5
Download software ranking
Boxer's Top ten classic battle2
WebService在.NET中的实战应用教学视频 → 第1集
Unix video tutorial18
美女写真3
C#与.NET技术平台实战演练
网络管理员第三版
Eclipse 4.2.2 For Win64
Tram sex maniac 2 (H) rar bag2
Unix video tutorial11
The Bermuda triangle3
aaa published in(发表于) 2013/12/18 7:50:01 Edit(编辑)
.NET,3.x新特性体验之扩展方法_.net资料_编程技术

.NET,3.x新特性体验之扩展方法_.net资料_编程技术

.NET 3.x新特性体验之扩展方法_.net资料_编程技术-你的首页-uuhomepage.com

  今天我们接着看一下.NET 3.x的新特性:扩展方法。这里需要说明的是我所说的.NET 3.x的新特性,其实是C# 3.0的一些新特性,考虑到LinQ等我就把这些特性叫做.NET 3.x新特性。可能这样叫会有些歧义,但是我还是觉的这样还好,闲话不多说让我们进入正题。我觉得在C#3.0中引入自动化属性等就已经减少了我们不少负担,而扩展方法是我最喜欢的,它提供的可视化提示中显得更为巧妙。但是我也会觉得有点烦琐,当一个类的扩展方法太多时,就像有LinQ存在的情况下,会出现一大批的提示方法......


  什么是扩展方法?他的语法又是怎么样的?让我们来看看。扩展方法必须定义在静态函数中,扩展的方法也必须是静态函数。这对于一些方法类的扩展提供了良好的支持,特别是对接口的补充更是极品啊,通常我们在用DataReader取对象时都需要一个转换,而通过dr(DataReader实例)的一些方法如:GetString(int),GetInt32(ing)...其中的参数都是列的索引,通常我们都需要填写列的名称,这样我们就可以对IDataReader接口进行扩展:


1 public static class Extensions
2 {
3 public static string GetString(this IDataReader dr,string name)
4 {
5 return dr.GetString(dr.GetOrdinal(name));
6 }
7
8 public static int GetInt32(this IDataReader dr, string name)
9 {
10 return dr.GetInt32(dr.GetOrdinal(name));
11 }
12 }


  从上面我们也可以知道他的语法,首先要有一个静态类Extensions,对IDataReader接口的扩展,需要加入this IDataReader,而参数就是列名name。下面我们来看看他在VS中是怎么智能提示的呢?



  在上面我们可以看到在dr对象中出现了上面扩展的提示(extension),原来IDataReader自带的只有一个GetString(int)方法,现在看到了有了个重载GetString(string)这样是不是感觉上好一点?注意:如果你要用此扩展必须引入所在的命名空间。


  在扩展方法中有一种继承作用,如果你在当扩展方法类(如上面的IDataReader)扩展,则他的子类也同样具有此扩展。如果我们想在所有类中都有的方法我们就可以对Object进行扩展,那样在所有类中都会具有此扩展的方法,只要你引用了他所做的空间。例如:我们如果要判断当前实例是否为集合或列表中的一个项,我们就可以对Object进行扩展,代码如下:


1 public static bool IsEmailAddress(this string text)
2 {
3 Regex regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
4 return regex.IsMatch(text);
5 }
6
7 public static bool IsIn(this object o, IEnumerable collection)
8 {
9 foreach (object item in collection)
10 {
11 if (item.Equals(o))
12 return true;
13 }
14 return false;
15 }


  我们可以在所有的对象中得到此扩展,可以参考下图:



  我们知道其实整个LinQ都是方法的扩展,这个我们把它留到以后研究他时再说,因为LinQ有三大部分,一个是相对于类的,一个是To SQL的,还有一个是To XML的。当年都把他们叫做LinQ,DLinQ,XLinQ现在好像没有这么个教法,我们就顺从微软的意愿吧。





添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.