扩展方法和分部方法.docVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
扩展方法和分部方法

扩展方法和分部方法  好久没过来扯淡了,话说这年头还有偶遇的事情吗?比如国庆回家的汽车上有个妹子要你qq,要你微信,想着法子跟你聊天,然后睡了一觉,醒来发现 肾不见了?小花絮小花絮,要是肾真没了,也吹不了牛,败不了火了,继续言归正传。 ? 一:扩展方法 ? ? ? ?说到扩展方法,我想大家都已经再熟悉不过了,也许你的解决方案中有无数个这样的扩展方法,自从有了Linq之后,我们的集合就再也不单纯了。 从下面的Linq类中,所有的方法都扩展在IEnumerableT上,恰恰我们的集合都继承于IEnumerable接口下面。 ? 然后我们在编码的时候就来了很多这样的扩展方法。 ? ? 那么现在问题来了,学挖掘机技术哪家强o(∩_∩)o...? ? 下面举一个扩展string类的一个Asint()方法,然后看看IL代码都干了些什么? 1 namespace ConsoleApplication1 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 var s = 123.AsInt(); 8 } 9 } 10 11 public static class StringExtension 12 { 13 public static int AsInt(this string value, int defaultValue = 0) 14 { 15 int result; 16 if (!int.TryParse(value, out result)) 17 { 18 return defaultValue; 19 } 20 return result; 21 } 22 } 23 } ? IL代码: ? 从IL的call指令可以看出,其实扩展方法本质上是调用静态类StringExtension中的AsInt方法,所以可以看出其实这也是编译器为了提高我们的开发 效率而提供的的一个语法糖而已,所以上面的写法同样可以写成这样,同样可以看出下面的写法就麻烦了很多。 1 s = StringExtension.AsInt(123); ? 那么下面又来了一个问题,既然可以随意扩展,那么我能不能扩展string类的任何一个方法?比如说ToLower()? 从下图中我们可以得到答案,在vs的智能感 知中显示出的方法还是string自带的方法,而不是我扩展的方法,这就说明编译器在用方法的时候还是有优先级的,正是因为有了这个优先级的问题,给我们 带来了一个很大的“版本控制问题”,就比如我刚才扩展的Asint()方法,如果后期的CLR版本中在String类中自己增加了Asint()方法的话,那我扩展的Asint() 方法从此就会被忘却于天涯,所以这个问题要留一点心。 ? 二:分部方法   ?说起分部方法,你可能会问它有什么应用场景,毕竟在我们实际的编码中很少使用到,到是分部类用的不少,所以啦,我必须找点场景出来。 恰好在EF中还真给找到了。 ? ? ?具体怎么建一个EF文件就不说啦,我们就看看EF生成的模板代码。 1 public partial class DataClasses1DataContext : System.Data.Linq.DataContext 2 { 3 4 private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource(); 5 6 #region 可扩展性方法定义 7 partial void OnCreated(); 8 #endregion 9 10 public DataClasses1DataContext() : 11 base(global::System.Configuration.ConfigurationManager.ConnectionStrings[testConnectionString].Connec

您可能关注的文档

文档评论(0)

hagoulz + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档