标签:
最近因为一个项目,需要将数据读入内存,做一些类似于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);
标签:
原文地址:http://www.cnblogs.com/deecold/p/4766097.html