×

用dotnet开发控件(二)

Kalet Kalet 发表于2009-03-20 12:00:14 浏览212 评论0

抢沙发发表评论

  我这个人最重基础,看DevExpress的代码不急(我以前总是本要研究A,结果从B上爬起来),老实说MSDN上面关于组件开发的部分我还没有看过,先看了这个再说,研究研究。打算以后写代码尽量使用组件式开发,磨练啊。


  这是MSDN中关于组件化设计的地址:ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_mclicc/html/4e153cde-8e1c-47cd-9da4-2bf345a10bfb.htm


  看了半天的msdn,终于搞明白了一些概念性的问题。

用dotnet开发控件(二)

  什么是组件?


  就是继承自System.ComponentModel.IComponent接口的类。那原来用vc6,vb6,delphi写的叫不叫组件呢,以前不是也叫它们组件吗?这个组件是dotnet的组件。在dotnet中,以前的那些组件叫com,com+,ActiveX或OCX控件。那有什么区别呢?大着呐,以前的是com,是非托管代码实现,而dotnet现在的组件概念意指为由dotnet托管语言创建的类。这个类还非得要实现自System.ComponentModel.IComponent接口。


  什么是控件?


  控件就是有UI的dotnet组件。这里的控件也不是以前讲的ActiveX控件。道理同上。控件类继承自IComponent类。其继承关系如下:


  System.IDisposable


            System.ComponentModel.IComponent

用dotnet开发控件(二)

                    System.ComponentModel.Component


                              System.Windows.Forms.Control


                              System.Web.UI.Control


这个继承关系就是这样了。像我搞桌面开发的,写的控件就是继承自:System.Windows.Forms.Control。我觉得这种方法很好,以前我用vb6的时候,如果要问什么是组件。那就非得用非人语言来描述了,讲三个45分钟未必能讲得完。现就很简单,一个类,一个实现了IComponent接口的类,如果要看一个具体的组件,只要看一下msdn上面关于IComponent上的文档就行了,再也不用看一堆似是而非的屁话。


   不得不说,以前倒是没有注意容器组件。在dotnet中,容器组件并不是指可视包容、物理包容,而只是一种逻辑包容。所有容器组件继承自:System.ComponentModel.IContainer,它接口的一个基实现为Container。如果要扩展容器可以从Container继承。容器有一个Components的集合属性,持有所有子组件的引用,而所有Component的子类实现都有一个Site属性,Component.Sit.Container可以获得自身的容器,容器Dispose之时会调用所有子组件的Dispose方法来释放资源。如此而己。没什么其它的了。更详细的描述见于msdn。

用dotnet开发控件(二)

  在看DevExpress的代码时,发现还有一个XXXXXDesign的代码文件夹,现在才算知道了。原来,这是提供对于组件在vs中的设计器的实现。呵呵。这等于在创建一个控件的时候,还得为它写一个另外的单独的程序集。以支持设计时的复杂处理。这个水就有点深了。这个应当可以暂时不研究吧。研究研究核心代码再说。南无阿弥陀佛。



群贤毕至

访客