c#扩展方法
2012-11-03 16:32
267 查看
上周五,看了一下公司一个项目的框架,虽然刚开始看的时候有些云里雾里的,但经过一天的潜心研究,慢慢的倒有些眉目了(还得花上几天的时间才能真正了解大师们的杰作)。在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开发的项目中,这种扩展方法随处可见,这里只是扩展方法的一个小小的例子,权当入门~~~~
假如你在业务层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开发的项目中,这种扩展方法随处可见,这里只是扩展方法的一个小小的例子,权当入门~~~~
相关文章推荐
- C#类(16) 扩展方法
- C# 扩展方法
- C#字符串扩展方法(分享·原创)
- C#:StrokeCollection类扩展方法——边界框计算
- C# 扩展方法
- C#中的扩展方法
- 扩展方法(C# 编程指南)
- c#扩展方法的使用
- c# 扩展方法奇思妙用基础篇十:IsEmpty、IsNotEmpty 扩展
- 【原创】开源Math.NET基础数学类库使用(12)C#随机数扩展方法
- C# 3.0 扩展方法
- C#扩展方法
- 向C#的String类添加按字节截取字符串的扩展方法
- 扩展方法(C#)
- C#扩展方法
- [C# 基础知识系列] 专题十五:全面解析扩展方法
- 向C#的String类添加按字节截取字符串的扩展方法
- C#:USB设备枚举(七)WPF扩展方法
- c# 扩展方法奇思妙用基础篇七:IsBetween 通用扩展
- [C#详解] (1) 自动属性、初始化器、扩展方法