【德华说插件开发】插件开发之必要条件C#语言继承与重写(金蝶云集成开发平台BOS设计器)原创
金蝶云社区-德华说
德华说
23人赞赏了该文章 1,779次浏览 未经作者许可,禁止转载编辑于2022年05月20日 10:25:10
summary-icon摘要由AI智能服务提供

本文介绍了金蝶插件开发中的继承和重写概念。继承是面向对象设计的基础,允许创建可重用和扩展的子类。重写是修改父类方法的行为。通过继承和重写,插件能够替换金蝶系统中的父类方法。同时,文章解释了DLL插件被金蝶系统识别和调用的过程,涉及反射、依赖注入和控制反转等技术。最后,强调了这些概念在插件开发中的重要性。

序:

对金蝶插件开发有所了解的小伙伴都知道,写一个插件首先是新建好一个类。


那有了这个类,我们必须要做的两件事:

继承 和 重写。


继承的类有很多,比如 抽象动态表单插件类:AbstractDynamicFormPlugIn


重写的方法(或者叫函数)也很多,比如按钮单击:

public override void AfterButtonClick(AfterButtonClickEventArgs e)
  {
            base.AfterButtonClick(e);
  }

而且,重写后的第一行一定是base.相同方法名的调用。


今天,德华来说一说为什么要通过继承和重写来写插件呢?


首先,什么是继承?

继承用于创建可重用、扩展和修改在父类中定义的行为的子类。其成员被继承的类叫基类也称父类,继承其成员的类叫派生类也称子类。继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。


其次,什么是重写?

重写”即为重写父类的方法,就是修改父类该方法的实现方式或者说在子类中对它进行重新编写。 


  1. 现在我们搞清楚了,例如:我们写插件继承父类AbstractDynamicFormPlugIn 的目的就是为了重写该类的方法:AfterButtonClick 按钮点击。
  2. 这样的话,我们在金蝶系统中点击按钮时,程序就不在调用父类AbstractDynamicFormPlugIn 的方法AfterButtonClick,而是调用我写的插件子类的方法AfterButtonClick。

  3. 同时,为什么会自动生成一行代码base.相同方法名的代码出现呢?base是指父类的意思,也就是说,在子类任然可以执行父类的方法的


高级进阶

最后,来点硬货了,我们写好了插件,并且生成了DLL文件,拷贝到了金蝶的安装目录下,那金蝶云星空的程序是如何识别我们写的DLL中的子类,因为我们并没有直接在金蝶的源代码中进行修改。这里就应用到反射技术了。感兴趣的小伙伴可以接着往下看。


反射

image.png

看到上面的专业内容,是不是有点晕。


  1. 简单来说,反射提供了另外一种方式去创建对象(普通方式为new),另外我们写好插件后,是不是要完成一个注册的动作,这个动作就是告诉金蝶程序的父类,我写了个插件,继承你了,现在是你的儿子(子类),你直接调用子类吧。


  2. 也就是说,对于我们写插件的人来说,我不用关心金蝶的系统源代码,金蝶系统只要留有一个入口,可以调用我写的插件就行了。


  3. 那么,金蝶系统通过什么方式留下这个入口,让我们写的插件程序被调用呢?下面就要说到两个技术概念:依赖注入和控制反转。


依赖注入

依赖注入(Dependency Injection),是这样一个过程:
由于某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只定义一个注入点。在程序运行过程中,客户类不直接实例化具体服务类实例,而是客户类的运行上下文环境或专门组件负责实例化服务类,然后将其注入到客户类中,保证客户类的正常运行。


控制反转

通过依赖注入,我们的目的达到了控制反转效果,就是子类(插件)替代了父类的方法执行



最后,感谢大家,动动小手关注、点赞、收藏 三连。

图标赞 23
23人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0