知识大全 了解C#特性扩展方法
Posted 扩展
篇首语:这个世界有两个我,一个假装快乐,一个真心难过。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 了解C#特性扩展方法相关的知识,希望对你有一定的参考价值。
了解C#特性扩展方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
PropertyHelper HasProperty(point X ) 如此的调用也还过得去 不过在C# 微软为我们提供了扩展方法 现在我们可以直接这样调用了point HasProperty( X );看看我是如何实现这个扩展方法的?
publicstaticclassPropertyExtension publicstaticobjectGetValueByName(thisobjectself stringpropertyName) if(self==null) returnself; Typet=self GetType(); PropertyInfop=t GetProperty(propertyName); returnp GetValue(self null);
我给object类型添加了一个扩展方法 里所有的类都继承自object 那所有的类都默认的拥有这个方法了 真方便 呵呵
注意到和普通的静态方法有何差别?在这个方法的第一个参数前面多了一个this关键字
扩展方法
方法所在的类必须是静态的
方法也必须是静态的
方法的第一个参数必须是你要扩展的那个类型 比如你要给int扩展一个方法 那么第一个参数就必须是int
在第一个参数前面还需要有一个this关键字
按照上面的步骤写你就得到了一个 扩展方法 你可以像调用这个类的原生方法那样去调用它
stringstr= abc ;objectlen=str GetValueByName( Length );
好像string类型现在有了GetValueByName这个方法一样 但实际上string并没有这样一个方法 那这又是为什么呢?是我们可爱的编译器在其中做了手脚 为了避开编译器的干扰 我们来直接欣赏MSIL代码
L_ :ldstr Length L_ d:callobjectTestLambda PropertyExtension::GetValueByName(object string)
从MSIL中我们可以看出 这段代码编译后和调用静态方法没有任何的差别(从call指令来看 这是在调用一个静态方法)
从这里可以知道扩展方法即可以使用实例调用的方式也可以直接使用静态类调用的方式
str GetValueByName( Length ); PropertyExtension GetValueByName(str Length );
下面将对扩展方法做一些细节的介绍
Visual Studio 对扩展方法有智能感知的支持 如下图
在方法的图标上有一个与其他的都不相同 他的突变下面还带有一个蓝色的向下的箭头 这就表明这个方法是一个扩展方法
下面是对编写扩展方法要注意的几个原则(当然 仁者见仁 智者见智 这也是一家之言)
扩展方法有就近原则 也就是如果在你的程序里有两个一模一样的扩展方法 一个和你的使用类是处于同一命名空间里 另外一个处于别的命名空间里 这个时候会优先使用同一命名空间里的扩展方法 也就是说 血缘关系 越近 越被青睐
很多人看到扩展方法也许眼里冒出金光 以后在设计的时候不管三七二十一 反正可以扩展 还有一些人会对类任意扩展 将以前一些作为 Helper 的方法统统使用扩展方法代替 注意的是扩展方法有 污染性 所以我觉得在扩展的时候还是想想 是不是值得这样扩展
在扩展的时候也不要对比较高层的类进行扩展 像我上面对object的扩展我觉得就是不可取的 object是所有类的基类 一经扩展 所有的类都被 污染 了
cha138/Article/program/net/201311/11425相关参考
了解C#特性扩展方法[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 按照上面的步骤写你就得
了解C#特性:对象集合初始化器[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在写一些实体
了解C#特性:对象集合初始化器[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 后来我发现我
了解C#特性匿名类型与隐式类型局部变量 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
C#扩展方法使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 为指定类型扩展方法 定义类Cl
使用C#编写扩展存储过程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 什么是扩展存储过程?
用C#或JavaScript扩展XSLT 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 今天在u
根据现有C#代码文件生成扩展代码文件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 为什么在这里
C#代码文件生成扩展代码文件的想法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 看到这标题的朋
C#特性学习与使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! C#特性以前的时候用过C#中的