
我写了两个扩展方法,一个是为自定义类扩展方法,另一个就是为FrameWork中的类扩展方法,下面分别说下:
一、为自定义类扩展方法
自定义类Peoplo
1
public
class
Peoplo
2
{
3
public Peoplo(bool sex)
4
{
5
Sex = sex;
6
}
7
public bool Sex
{ get; set; }
8
}

2



3

4



5

6

7



8

Peoplo类定义了一个Bool类型的属性Sex,Sex=true表示男,Sex=false表示女。
下面是用于为Peoplo类扩展方法的一个静态类ExtendPeoplo,代码如下:
1
public
static
class
ExtendPeoplo
2
{
3
public static string GetSex(this Peoplo pl)
4
{
5
if (pl.Sex)
6
{
7
return "男";
8
}
9
else
10
{
11
return "女";
12
}
13
}
14
}
注意这个类是个静态类,其中的扩展方法GetSex()也是静态方法,它只有一个参数Peoplo pl,这里得详细说一下,他在关键字this的后面,this的作用就是告诉编译器这个方法是Peoplo类的一部分,且这个方法的第一个参数必须是关键字this,然后紧跟着要扩展的类,在这个类中Getsex要扩展的就是Peoplo类,换句话说,要为那个类扩展方法,那么这个扩展方法的第一个参数必须是以this开头后面紧跟着要扩展的类(this Peoplo pl这种形式),并且在调用该扩展方法时第一个参数并不显示,他只是告诉编译器我这个扩展方法属于这个类。

2



3

4



5

6



7

8

9

10



11

12

13

14

下面来说一下如何使用这个扩展方法。
下面是我创建的一个Default.aspx.cs,调用代码如下:
protected
void
Page_Load(
object
sender, EventArgs e)
{
Peoplo pl = new Peoplo( true );
Response.Write(pl.GetSex());
}
首先我们创建一个Peoplo的实例pl,并且初始化pl的Sex属性为true(表示男),这时候pl就已经有一个扩展方法GetSex()了(上面说了扩展方法的第一个参数并不显示,所以扩展方法的就变成一个没有参数的方法GetSex()),这是我们输入pl.vs2008的代码提示功能就会显示我们刚才的这个扩展方法,如下图:
{
Peoplo pl = new Peoplo( true );
Response.Write(pl.GetSex());
}

扩展方法很好识别,他的方法名前面有一个蓝色向下的箭头,这个标志就表示该方法是扩展方法,使用Response.Write(pl.GetSex)向叶面输出结果,运行结果为:男。
这是一个非常简单的例子,一时间没有想出更好的例子,所以只能先用这个了,呵呵!
说下自己的感受,感觉为自定义类扩展方法没有什么必要性,我们完全可以在自定义类中来实现这个效果啊,我知道我想的对不对,望路过的大牛们指点下,呵呵。
二、FrameWork中的类扩展方法
下面以为String类扩展一个GetString()方法为例,这个扩展方法所在的类为ExtendString.cs,代码如下:
1
public
static
class
ExtendString
2
{
3
public static string Getstring(this String str1, int n, string str2)
4
{
5
int strcount = str1.Length;
6
if (strcount > n)
7
{
8
return str1.Substring(0, n) + str2 + str1.Substring(n);
9
}
10
else
11
{
12
return "出错了!";
13
}
14
}
15
}

2



3

4



5

6

7



8

9

10

11



12

13

14

15

这个方法的功能是在str1的第N个索引位置插入一个str字符串,然后返回这个新字符串,如果n>str1的长度则返回字符串“出错了”,代码很简单。
下面是如何调用这个扩展方法,代码如下:
protected
void
Page_Load(
object
sender, EventArgs e)
{
string str = " 我是字符串 " ;
Response.Write(str.Getstring( 2 , " , " ));
}
{
string str = " 我是字符串 " ;
Response.Write(str.Getstring( 2 , " , " ));
}
首先定义一个字符串变量str="我是字符串",那么str就有了一个扩展方法Getstring(int n,string str2),运行结果如下:我是,字符串 。
我觉得还是为 framework中的类扩展方法比较实用,原因很简单,framework内置的类不允许修改,如果不用扩展方法的话要实现上述的功能,我们只能自定一个类来实现这个功能,然后在实例化这个类,再调用其中的方法来实现,开发起来不是很效率,有了这个扩展方法就不一样了。
哈哈,这些就是我的收获,由于能力十分有限,文中可能存在很多错误,希望走过、路过的大牛们,多多批评指正,本人脸皮厚,有问题尽管指出,谢谢 !