c#扩展方法
上周五,看了一下公司一个项目的框架,虽然刚开始看的时候有些云里雾里的,但经过一天的潜心研究,慢慢的倒有些眉目了(还得花上几天的时间才能真正了解大师们的杰作)。在IT公司里面应该普遍都有一个这样的开发原则:开闭原则,通俗的讲就是尽量不修改原来的代码的基础上扩展新的功能方法。特别是在不同的公司之间,需要对另外的公司提供的类进行扩展的时候,就需要使用到扩展方法了,因为另外一个公司不可能把他做的类库全部给你看。连看一个最简单的例子:
假如你在业务层BLL的一个BllClass类中定义了一个方法:
public string SayHello()
{
return "大家好~~我是hellokit";
}
系统上线之后,这些类都已经编译完成了,当我们需要增加需求的时候,我们当然不可能再去修改这个类,这个时候据轮到扩展方法上场了~~:
定义一个扩展方法:该方法必须是处在一个静态类中的静态方法:具体如下:
public static SayHelloExtension
{
public static SayHelloExtensionMethod(this BLL.BllClass bllClass,string Name)//this BLL.BllClass bllClass指明你要往哪一个类里面添加扩展方法。
{
return Name+"大家好呀~~~~";
}
}
在客户端的调用:
BllClass bllClass=new BllClass();
bllClass.SayHello();
//神奇的事情即将发生:
bllClass.SayHelloExtensionMethod("小白猫");//BllClass类对象竟然可以点出SayHelloExtensionMethod()方法,这就是扩展方法的魅力。在这里大家可能会有个疑问:既然扩展方法本质上是一个静态的方法,那为什么可以通过类的对象点出来?这就是微软为方便程序员而特别定义的一种“怪异”的方法,就如同Linq命名空间下的where的方法一致。
通过源代码我们可以知道:bllClass.SayHelloExtensionMethod("小白猫")这一句通过编译器编译过之后,就是调用了静态类SayHelloExtension类的SayHelloExtensionMethod(),而不是将该扩展方法添加到原有的实例方法上~~~
在用MVC开发的项目中,这种扩展方法随处可见,这里只是扩展方法的一个小小的例子,权当入门~~~~