技术开发 频道

使用大杂烩框架AppFuse快速开发Web程序

    三、C# 3.0中如何解决Type的扩展性

    理解了我们的具体需要和现有编程语言的局限性后,我们来看看C# 3.0中是如何通过Extension Method解决这个问题的。

    简单地说Extension Method是一个定义在Static Class的一个特殊的Static Method。之所以说这个Static Method特别,是因为Extension Method不但能按照Static Method的语法进行调用,还能按照Instance Method的语法进行调用。

    我们还是先来看例子,首先是我们需要进行扩展的Vector Type的定义:
public class Vector {  private double _x;  private double _y;  public double X  {   get {return this._x;}   set { this._x = value;}  }  public double Y  {   get { return this._y;}   set {this._y = value;}  } }
    在不对Vector Class的定义进行更新的前提下,我们把需要添加的Adds方法定义在一个Static Class中:
public static class Extension {  public static Vector Adds(this Vector p,Vector p1)  {   return new Vector { X = p.X + p1.X, Y = p.Y + p1.Y };  } }
    这个Extension Method:Adds是一个Static方法。和一般的Static方法不同的是:在第一个参数前添加了一个this 关键字。这是在C# 3.0中定义Extension Method而引入的关键字。添加了这样一个关键字就意味着在调用该方法的时候这个标记有this的参数可以前置,从而允许我们向调用一般Instance Method的方式来调用这个Static Method。比如:
class Program {  static void Main(string[] args)  {   var v = new Vector { X = 1, Y = 2 };   v = v.Adds(v);   Console.WriteLine("v.X = {0} and v.Y = {1}", v.X, v.Y);  } }
    注:this关键字只能用于标记第一个参数。

    通过上面的介绍,我们知道在C# 3.0如何通过定义Extension Method在不对Type作任何修改的前提下对Type进行扩展。
0
相关文章