理解新特性之牛

激光设备2021年09月06日

但是在很多情况下,对于我们需要扩展的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
友情链接