C# EmployeePlug类概述

开发 后端
这里介绍C# EmployeePlug类的数据在这里用EmployeeData对象来存储,那也是一个类型并且实现了IPlugData接口。

C#有很多值得学习的地方,这里我们主要介绍C# EmployeePlug类,包括介绍主程序框架被设计为两个程序集等方面。

插件在EmployeePlug.cs和CustomerPlug.cs中定义。列表三展示了C# EmployeePlug类的部分定义。下面是一些关键点。

1。这个类实现了IPlug接口。由于主程序根本不会知道插件内部的类是如何定义的,这非常重要,主程序需要使用IPlug接口和各个插件通信。这种设计利用了面向对象概念里面的多态性。多态性允许运行时,可以通过指向基类的引用,来调用实现派生类中的方法。

2。这个类被两个属性标识,这样主程序可以判断这个插件是不是有效的。在C#中,要给一个类标识一个属性,你得在类的定义之前声明属性,内容附在括号内。

3。简明起见,例子只是使用了直接写入代码的数据。而如果这个插件是个正式的产品,那么数据总是应该放在数据库中或者文件中,各自所有的数据都应该仅仅由插件本身来管理。C# EmployeePlug类的数据在这里用EmployeeData对象来存储,那也是一个类型并且实现了IPlugData接口。IPlugData接口在IPlugData.cs中定义,它提供了最基础的数据交换功能,用于主程序和插件之间的通讯。所有支持IPlugData接口的对象在下层数据变化的时候将提供一个通知。这个通知实际上就是DataChanged事件的发生。

4。当主程序需要显示某个插件所含数据列表的时候,它会调用GetData方法。这个方法返回IPlugData对象的一个数组。这样主程序就可以对数组中的每个对象使用ToString方法得到数据以建立树的各个节点。ToString方法是EmployeeData类的一个重载,用于显示雇员的名字。

5。IPlug接口也定义了Save和Print方法。定义这两个方法的目的在于当有需要打印或者保存数据的时候,要通知一个插件。EmployeePlug 类就是用于实现打印和保存数据的功能的。在使用Save方法的时候,需要保存数据的位置将会在方法调用的时候提供。这里假设主程序会向用户查询路径等信息。路径信息的查询是主程序提供给各个插件的服务。对于Print方法,主程序将把选项和内容传递到
System。Drawing。Printing。PrintDocument类的实例。这两种情况下,和用户的交互操作都是一致的由主程序提供的。

主程序框架被设计为两个程序集。***个程序集是Host.exe,它提供了主程序的Windows窗体界面。第二个程序集是HostCommon.dll,它提供了主程序和插件之间进行通信所需的所有类型定义。比如,IPlug接口就是在 HostCommon.dll里面配置的,这样它可以被主程序和插件等价的访问。这两个程序集在一个文件夹内,同样的,附加的作为插件的程序集也需要被配置在一起。那些程序集被配置在plugs文件夹内(主程序目录的一个子文件夹)。C# EmployeePlug类在Employee.plug 程序集中定义,而CustomerPlug类在Customer.plug程序集中定义。这个例子指定插件文件以.plug为扩展名。事实上这些插件就是个普通的.NET类库文件,只是通常库文件使用.dll扩展名,这里用.plug罢了。特殊的扩展名对于程序运行是完全没有影响的,但是它可以让用户更明确的知道这是个插件文件。

【编辑推荐】

  1. C#泛型支持简单描述
  2. C#实现泛型类简单分析
  3. C# Singleton设计模式浅谈
  4. C#对接口成员访问分析
  5. C#实现插件构架浅析
责任编辑:佚名 来源: 博客园
相关推荐

2009-09-04 13:31:33

C#抽象类

2009-08-17 17:42:57

C#数据库操作类

2009-08-13 15:18:23

C#文件上传

2009-08-18 09:26:07

C#线程功能

2009-08-18 17:29:02

C#使用指针

2009-07-31 14:08:54

C# 匿名函数

2009-09-03 11:15:38

C#设置Coopera

2009-08-31 09:44:23

C# Employee

2009-08-20 16:28:45

C#匿名方法

2009-08-24 18:09:13

C#构造函数

2009-08-17 09:57:00

C# Windows

2009-08-25 10:08:39

C# MyData对象

2009-08-19 11:09:00

C# Cast<T>

2009-08-25 16:49:44

C#使用if语句

2009-08-06 14:08:08

C#语言异常处理

2009-07-31 15:37:45

C#静态构造函数

2009-09-04 14:41:09

C#同步线程

2009-08-26 09:36:03

C#泛型

2009-08-10 17:12:54

C#编译器

2009-08-07 17:19:50

C#调用外部进程
点赞
收藏

51CTO技术栈公众号