码迷,mamicode.com
首页 > Windows程序 > 详细

C#扩展方法

时间:2015-08-28 12:52:25      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

 

  最近因为一个项目,需要将数据读入内存,做一些类似于SQL的操作。首先想到的是使用LinQ来实现这些统计分析的需求。在使用linq的过程中发现许多被称之为扩展方法的东东帮助我们完成一些count\max\min等功能。功能可以实现,但是这些扩展方法是如何起作用的呢?我查阅了一些资料,整理一些心得,以备自己忘记。

  按照MSDN的说法,扩展方法为了向封闭类中添加新“方法”而提出来了。需要注意的是,这里的类是封闭类,指得是那些没有办法或不想获取源代码的类。为了实现在类上添加新的功能函数,应该怎么办呢?

  方法一:使用静态方法,并将该类的一个实例作为参数传递给静态方法,在该方法内部对类进行扩展。这样在使用新的功能函数的时候,需要知道静态方法签名,并每次调用该静态方法,在使用的过程中略显繁琐,也不符合人类使用的基本思想。如下

 1 //static method 
 2   private static int StringToNum_Common(string str)
 3         {
 4             
 5             try
 6             {
 7                 int num = int.Parse(str);
 8                 return num;
 9             }
10             catch
11             {
12                 return 0;
13             }
14         }
15 
16  //cleint
17 
18  int num= StringToNum_Common(str);
19  Console.WriteLine("str is {0},num is {1}", str, num);

 

  方法二:使用扩展方法。新建一个静态类,包含该静态方法,这样子在使用该方法时就不需要使用静态调用的方式。如下:

  

 1 //extend class
 2  internal  static class   StrExtend{
 3         public static int StringToNum_Extend(this string str)
 4         {
 5             try
 6             {
 7                 int num = int.Parse(str);
 8                 return num;
 9             }
10             catch
11             {
12                 return 0;
13             }
14         }
15 
16     }
17 
18 //client
19 
20    int num2 = str.StringToNum_Extend();
21    Console.WriteLine("str is {0},num2 is {1}", str, num2);

 

  

  

C#扩展方法

标签:

原文地址:http://www.cnblogs.com/deecold/p/4766097.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!