前言 本帖是接上一个贴的基础贴,理论上来说也是一个基础知识,但会加上更多的实际项目来说明.涉及的知识点比较多.因此建议有一定基础的才去了解,至少要学会我之前的基础贴所说的内容. 涉及点如下: 1. 封装(重点) 2. 分层(简单) 3. 多态 4. 依赖注入 5. 面向对象分析,设计.(少量) 6. 设计模式(少量)
为什么学习vsto要知道这么多东西呢?不就是跟vba一样,调用,调用,再调用吗?恐怕是很多人的想法.在我看来,vba板块是把vba作为脚本语言来编写应用,不是说不妥,而是当你看到一次次重复的代码出现在不同的项目,相同功能的东西要重复调试,这样只是把手动重复操作变成手动重复编码而已.从vba转到.net上的同学很多是把C#或vb.net当做脚本来使用,这样就不能发挥强类型和静态语言的优势.
我不排除有些人在某些阶段是很喜欢写代码,但我觉得很多人学到一定程度会跟我一样,喜欢的是编写程序,编写符合需求业务的程序,而不是一句句的if+for代码.
这里就举个小例子,例如把单元格区域的某一列添加到一个字典里面,这样的代码是不是写到想吐呢?我就大概写了两个类,就可以像下面的调用: - var dict= wrk.UsedRange.ToValueArray().GetColumnValues(1).ToDictionary(v=>v);
复制代码
注意,上面的一句代码就实现了刚刚说的” 把单元格区域的某一列添加到一个字典里面”,其中其实只有两个方法(ToValueArray和GetColumnValues)是我自己添加的,其他的方法都是本身有的.而且其中还把单元格区域的值直接放到二维数组使用了(就像vba一样).只要是Range类的对象,都可以像上面的那样使用.
如果我把通用的类写到一个类库项目,那么以后的新的项目,只需要我引用,就可以这样使用了.当然,可以设计实现更复杂的需求,例如把两列加入字典,把某些行根据某些条件过滤之后才加入字典.调用的时候也是跟上面一样,一句代码.
其实上面的例子重点不是在于调用的时候是否只有一句的代码,重点在于调用代码本身非常明显清晰展示业务逻辑,相信不需要注释就可以表达.这些其实是面向方面的编程思想.面向过程和面向对象也是同样的目的.希望本帖可以让大家学到编写属于自己的库的能力,那个时候就是大家发挥想象力的时候了.
|