本文介绍了金蝶插件开发中的继承和重写概念。继承是面向对象设计的基础,允许创建可重用和扩展的子类。重写是修改父类方法的行为。通过继承和重写,插件能够替换金蝶系统中的父类方法。同时,文章解释了DLL插件被金蝶系统识别和调用的过程,涉及反射、依赖注入和控制反转等技术。最后,强调了这些概念在插件开发中的重要性。
序:
对金蝶插件开发有所了解的小伙伴都知道,写一个插件首先是新建好一个类。
那有了这个类,我们必须要做的两件事:
继承 和 重写。
继承的类有很多,比如 抽象动态表单插件类:AbstractDynamicFormPlugIn。
重写的方法(或者叫函数)也很多,比如按钮单击:
public override void AfterButtonClick(AfterButtonClickEventArgs e) { base.AfterButtonClick(e); }
而且,重写后的第一行一定是base.相同方法名的调用。
今天,德华来说一说为什么要通过继承和重写来写插件呢?
首先,什么是继承?
继承用于创建可重用、扩展和修改在父类中定义的行为的子类。其成员被继承的类叫基类也称父类,继承其成员的类叫派生类也称子类。继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。其次,什么是重写?
“重写”即为重写父类的方法,就是修改父类该方法的实现方式或者说在子类中对它进行重新编写。
- 现在我们搞清楚了,例如:我们写插件继承父类AbstractDynamicFormPlugIn 的目的就是为了重写该类的方法:AfterButtonClick 按钮点击。
这样的话,我们在金蝶系统中点击按钮时,程序就不在调用父类AbstractDynamicFormPlugIn 的方法AfterButtonClick,而是调用我写的插件子类的方法AfterButtonClick。
同时,为什么会自动生成一行代码base.相同方法名的代码出现呢?base是指父类的意思,也就是说,在子类任然可以执行父类的方法的。
高级进阶
最后,来点硬货了,我们写好了插件,并且生成了DLL文件,拷贝到了金蝶的安装目录下,那金蝶云星空的程序是如何识别我们写的DLL中的子类,因为我们并没有直接在金蝶的源代码中进行修改。这里就应用到反射技术了。感兴趣的小伙伴可以接着往下看。
反射
看到上面的专业内容,是不是有点晕。
简单来说,反射提供了另外一种方式去创建对象(普通方式为new),另外我们写好插件后,是不是要完成一个注册的动作,这个动作就是告诉金蝶程序的父类,我写了个插件,继承你了,现在是你的儿子(子类),你直接调用子类吧。
也就是说,对于我们写插件的人来说,我不用关心金蝶的系统源代码,金蝶系统只要留有一个入口,可以调用我写的插件就行了。
那么,金蝶系统通过什么方式留下这个入口,让我们写的插件程序被调用呢?下面就要说到两个技术概念:依赖注入和控制反转。
依赖注入
依赖注入(Dependency Injection),是这样一个过程:
由于某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只定义一个注入点。在程序运行过程中,客户类不直接实例化具体服务类实例,而是客户类的运行上下文环境或专门组件负责实例化服务类,然后将其注入到客户类中,保证客户类的正常运行。
控制反转
通过依赖注入,我们的目的达到了控制反转效果,就是子类(插件)替代了父类的方法执行。
最后,感谢大家,动动小手关注、点赞、收藏 三连。
推荐阅读
【德华说】插件开发之学习C#语言基础入门(金 …
- 文章
2,170
【德华说】插件开发的必要条件之学习C#语言 …
- 文章
2,986
【德华说】插件开发之打印快递面单(金蝶集成开 …
- 文章
2,009