理解C# 3.0新特性之Extension方法浅议

http://tech.ddvip.com   2007年08月23日    社区交流

内容摘要:在这篇文章中,我将介绍我自己对Extension method这个新特性的理解。

  在C#3.0中,引入了一些列新的特性,比如: Implicitly typed local variable, Extension method,Lambda expression, Object initializer, Anonymous type, Implicitly typed array, Query expression, Expression tree。个人觉得在这一系列新特性的,最具创新意义的还是Extension method,它从根本上解决了这样的问题:在保持现有Type原封不动的情况下对其进行扩展,你可以在对Type的定义不做任何变动的情况下,为之添加所需的方法成员。在这篇文章中,我将介绍我自己对Extension method这个新特性的理解。

  一、Prototype in JavaScript

  为了说明Extension method到底是为了解决怎样的问题,我首先给出一个类似的、大家都比较熟悉的应用:JavaScript 中的Prototype。

  比如我们在JS通过function定义了一个Vector class,代表一个2维向量。

function Vector (x,y)
{
  this.x = x;
  this.y = y;
}

  现在我们需要在不改变Vector定义的前提下,为之添加相关的进行向量运算的Method。比如我们现在需要添加一个进行两个向量相加运算的adds方法。在JS中,我们很容易通过Prototype实现这一功能:

Vector.prototype.adds = function(v)
{
  if(v instanceof Vector)
  {
   return new Vector(this.x+v.x, this.y + v.y);
  }
  else
  {
   alert("Invalid Vector object!");
  }
}

  那么,通过添加上面的一段代码,我们完全可以把adds方法作为Vector的一个方法成员。现在我们可以这样的方式来写代码:

var v = new Vector (1,2);
v= v.adds(v);
alert("x = " +v.x + ", y = "+v.y);

来源:博客园    作者:Artech    责编:豆豆技术应用

正在加载评论...