理解新特性之牛
但是在很多情况下,对于我们需要扩展的Interface或者是Type,我们是完全不能做任何改动。比如,某个Type定义在一个由第三方提供的Assembly中。在现有的情况下,对于这样的需求我们将无能为力。我们常用的方法就自己定义的Class去继承这个需要扩展,将需要添加的成员定义在我们自己定义的Class中,如果对于一个Sealed Class又该如何呢?即便不是Sealed Class,这作用方式也没有完成我们预定的要求:我们要求的是对这个不能变动的Type进行扩展,也就是所这个不能变动的Type的Instance具有我们添加的对象。
如果你在完全了解Extension Method的前提下听到这样的要求:我们要对一个Type或者Interface进行扩展,却不允许我们修改它。这个要求确实有点苛刻。但是,不能否认的是,这样需要在现实中的运用是相当广泛的。所以我说,Extension Method在所有提供的新特性中,是具有价值的一个。
三、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;
3)不可否认的最佳方案 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 = ds(v);
iteLine(\"v.X = {0} and v.Y = {1}\", v.X, v.Y);
}
}
注:this关键字只能用于标记第一个参数。
通过上面的介绍,我们知道在C# 3.0如何通过定义Extension Method在不对Type作任何修改的前提下对Type进行扩展。
拉萨医院白癜风氨氯地平贝那普利片(Ⅱ)好不好
哈尔滨阴道炎哪家好
- 上一页:理解的五项主要改进覆盖
- 下一页:理解浮动元素建立更好网站呢
-
曾经我们经历多少风雨,以前敌不过如水平淡
亲爱的是什么?亲爱的是两个人因缘分相遇时的恰巧,是灵性契合时的师徒相...
2023-09-08
-
线粒体功能障碍/突变与神经系统疾病的肺癌机制相互关联
线粒体核功用障碍与骨骼肌营养不良成果的区别已引起广泛关心。线粒体核网...
2023-09-03
-
真正的说话高手是怎么说话的?3个法则受用一辈子(写得真好)
你身边赞同有这样的人, 他跟别人感情,总是如鱼得水, 执行疑问快准没用...
2023-09-01
-
主妇与人相处,禁止这3种虚伪,不然你根本不会成为同事圈的一员
在基层管理工作,最极为重要的不是你的并能, 而是和上司的见面独处, 并...
2023-08-31
-
要抓住一个男人,聪明女人但会选择主动“断联”
文/落叶乔木 在男女交往上,多半不仅仅只是一场恋幸福,而是男女双方的一...
2023-08-30
-
还记得《十八岁的天空》里的校花蓝菲琳吗?她现在高约这样啦!
哈喽小蘑菇们,又到了每天渗入年龄的间隔时间,在此早先的他们长什么仿佛...
2023-08-29