水如烟

                 顺其自然,水到渠成 LzmTW

文或代码皆是面向初学者.我是爱好者,也是初学者.那些"文章",只按自己理解写,我是不知术语名词的.所以只供参考,也仅供参考.

导航

异类HOW TO:适时弹出指示框(二)

Posted on 2006-05-30 11:20  水如烟(LzmTW)  阅读(412)  评论(0编辑  收藏  举报

Author:水如烟

AOP是一个较系统复杂的概念,我是无法把握的,在这里,我只有这个念头,怎么的跟踪类中方法的动作。因此,我给它的命名空间就是MethodWatcher,参考了FileSystemWather的命名。MethodWatcher针对的是某个类,并且该类是Inherits ContexBoundObject,上文说了是有条件的,就是这个条件。

在具体列代码之前,先说说这个空间的组织。


在我这里,根命名空间是LzmTW。

基础类,声明为MustInherit的有MethodWatcherBaseAttribute,MethodWatcherBaseProperty,MethodWatcherBaseSink,这三个类就是作用于ContextBoundObject的,AOP关键的几个概念如接合点、切点之类的,就在这三个类实现。还有一个MethodWatcherAppendBaseAttribute是指示哪些方法用来Watcher的,在上文列出的有关文章中,一般是用配置文件来指出。

Use下头的两个文件,是用来作一般处理的,全是Shared。其中MethodCollection用来存放待Watcher的方法名。这个方法名用“全名”表示,就是方法所属类的全名加“+”加方法名+Append类名。MethodWatcherCommon是处理中用到的公用方法。MethodWatcherCenter来接收MethodWatcherBaseSink发出的消息。

具体运用时要实现四个类。这里,MessageForm下的MessageFormAttribute实现了MethodWatcherBaseAttribute,MessageFormProperty实现了MethodWatcherBaseProperty,MessageFormSink实现了MethodWatcherBaseSink。而MessageFormAppendAttribute实现了MethodWatcherAppendBaseAttribute。

当然,除此外,另外的还有一个对话框的,组织如下:


ProgressForm继承于MessageForm,就多了一个ProgressBar,它的Stype属性设为Marquee。
两个类都是Friend,外面的调用全由WaitingForm来处理。
当然,Form有关属性的设置,要考虑到线程。

MethodLog实现日志处理。

下文是代码的了。