博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#扩展方法
阅读量:7055 次
发布时间:2019-06-28

本文共 1390 字,大约阅读时间需要 4 分钟。

 

  最近因为一个项目,需要将数据读入内存,做一些类似于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             catch11             {12                 return 0;13             }14         }15 16  //cleint17 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             catch11             {12                 return 0;13             }14         }15 16     }17 18 //client19 20    int num2 = str.StringToNum_Extend();21    Console.WriteLine("str is {0},num2 is {1}", str, num2);

 

  

  

转载于:https://www.cnblogs.com/deecold/p/4766097.html

你可能感兴趣的文章