首页 新闻 会员 周边

关于2008引入的扩展方法

0
悬赏园豆:20 [已解决问题] 解决于 2008-10-20 14:12
<pre class="libCScode"><span style="color: blue;">Imports</span> System.Runtime.CompilerServices<br /><br /><span style="color: blue;">Module</span> StringExtensions<br /><br /> &lt;Extension()&gt; _<br /> <span style="color: blue;">Public</span> <span style="color: blue;">Sub</span> Print(<span style="color: blue;">ByVal</span> aString <span style="color: blue;">As</span> <span style="color: blue;">String</span>)<br /> Console.WriteLine(aString)<br /> <span style="color: blue;">End</span> <span style="color: blue;">Sub</span><br /><br /><span style="color: blue;">End</span> <span style="color: blue;">Module<br /><br /><br /></span><span style="color: blue;">Imports</span> ConsoleApplication2.StringExtensions<br /><br /><span style="color: blue;">Module</span> Module1<br /><br /> <span style="color: blue;">Sub</span> Main()<br /><br /> <span style="color: blue;">Dim</span> example <span style="color: blue;">As</span> <span style="color: blue;">String</span> = <span style="color: maroon;">"Hello"</span><br /> <span style="color: green;">' Call to extension method Print.</span><br /> example.Print()<br /><br /> <span style="color: green;">' Call to instance method ToUpper.</span><br /> example.ToUpper()<br /> example.ToUpper.Print()<br /><br /> <span style="color: blue;">End</span> <span style="color: blue;">Sub</span><br /><br /><span style="color: blue;">End</span> <span style="color: blue;">Module</span><br />&nbsp;<br />如上面的代码理解起来很容易,但是在面向对象设计的时候什么样的情况会涉及到扩展方法呢?<br />从单一职责原则等看来看不出这个扩展方法会应用到什么场景。<br />可以理解为这个扩展方法大多用在软件类而非实体类么?<br /><br />本人学艺不精,希望高手指点</pre>
黄昌楠的主页 黄昌楠 | 初学一级 | 园豆:185
提问于:2008-10-20 13:06
< >
分享
最佳答案
0

扩展方法,名字虽然叫扩展方法,但你要看清他的本质

扩展方法的本质就是一个静态方法,没有任何特殊之处

因此,静态方法的限制,扩展方法同样有,在扩展方法中,你同样不能访问对象的非public的成员

 

扩展方法归根结底,只是一个语法糖,让一个静态方法“看上去像成员方法”一样来调用

一句话,看起来好看而已,你觉得有必要让你的代码好看点就用,没必要就不用了,这东西本质没有违反任何原则,包括SRP

Gray Zhang | 专家六级 |园豆:17610 | 2008-10-20 13:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册