c#基础之扩展方法

  

, public  static  class    ,,,{   ,,,,,,,public  static  int 测试(却;能够string  s)   ,,,,,,,{      ,,,,,,,,,,,return  1;   ,,,,,,,}      ,,,,,,,public  static  int  IndexOf(却;能够string 年代,char  c)   ,,,,,,,{   ,,,,,,,,,,,return  1;   ,,,,,,,}   ,,,}   ,,,class 程序   ,,,{   ,,,,,,,static  void  Main (string [], args)   ,,,,,,,{   ,,,,,,,,,,,int  a =,“(sds);   ,,,,,,,,,,,int  c =,“sds test ();   ,,,,,,,,,,,Console.WriteLine(一个);   ,,,,,,,,,,,Console.WriteLine (c);      ,,,,,,,,,,,int  b =, A.IndexOf (“asdfg”,“d”);   ,,,,,,,,,,,Console.WriteLine (b);   ,,,,,,,,,,,int  d =,“asdfg .IndexOf (' d ');   ,,,,,,,,,,,Console.WriteLine (d);   ,,,,,,,}   ,,,}

扩展方法很简单,就是在参数类型前面加这个,就为当前参数的类型增加了扩展方法,但是必须在静态类中声明静态方法(想要扩展的方法)。以上例子为字符串类扩展了测试方法和indexof方法(字符串中有同名方法),运行结果为1 1 1 2,由此可以推论扩展的方法如果和字符串类中的方法重名,则会执行字符串类中的方法,而不会执行扩展方法,再让我们来看看反编译的结果 C #基础之扩展方法

由此更可以确定执行的是字符串中的方法,再看上面的两个调用,可以观察到调用的都是一个类中的静态方法,和字符串类并无多大关联,也可以得出扩展方法是不能调用字符串中的私有变量和方法,所以字符串类也不用重新编译。

对扩展类总结下:

,,,,扩展方法不改变原有被扩展类代码,不用重新编译被扩展类。

,,,,不能访问被扩展类的私有成员,当和同名方法重名时优先执行原方法

,,,,引用一个类库,但是我们没有该类库的源代码,那么我们可以使用扩展方法,使用扩展方法进行类的扩展。

,,,,,,



第一次写博文,望大神多多指点。

c#基础之扩展方法