使用 Visual Studio 2005 创建 VB.NET 类库的基础回顾
关于创建 VB.NET 类库 (DLL) 的讨论与示例
引言
这是一个关于创建 .NET DLL 或自己的类库的快速指南。
在提交构建类库之前,我花了一些时间清理我在 DesignLab(C) 2007 项目中的所有绘图例程。需要说明的是,没有特别的原因就没有必要这样做。原因在于需要在各种程序中使用这些例程。我开始看到可以在其他应用程序中使用我的绘图引擎,例如屏幕保护程序和动画。
类库将包含许多数据(属性)以及用于设置这些数据的例程(方法)。其他数据可能通过例程的参数提供。我的绘图例程都需要一个点数组来定义对象,这由用户自己构建,因此作为参数传入。此外,还有许多用于各种类别的属性,例如轮廓、仅轮廓、前景色、填充样式、填充颜色、绘制宽度等。在这种情况下,我在类库中编写了例程,以便在一个子程序或方法中设置这些关联的参数。
我暴露了结构,以便用户可以单独获取或设置任何参数,但是更高级别的例程有助于组织使用,因此通过大约六个设置调用,您就可以引导完成引擎绘制对象所需的大约 40 个参数。颜色本身会变得复杂,因为在 GDI+ 中,您始终需要考虑对每种指定的颜色使用 alpha。
我的项目有四个不同的层
- 主窗体选择建立所有绘图标准。
- 一个层将主窗体请求转换为两个绘图结构。
- 一个控制对象选择和生成、数量、大小、平铺、组合等的结构。
- 一个控制绘图引擎、透明度、填充、六种颜色、画笔、阴影、高光等的结构。
- 一个层将对象转换为绘图引擎点数组。
- 需要第 2B 层和第 3 层作为输入的绘图引擎。
由于我对其他项目感兴趣,其中第一层可以被替换,第二层的功能也可以被改变,也许是在三维网格上进行动画而不是在二维网格上绘图,因此将第四层转换为类库是值得的。
这总是比我描述的要模糊。例如,我的旋转方案现在处于第 2 层和第 3 层之间的一片模糊地带,我想将它们移到类库中,但是我的嵌入代码方式需要一些重构。关键是,类库不计算对象的大小或方向,而这似乎应该是它能做的或者可以做的……正如我所说,这并不总是能清晰地呈现出来。
通常,采取那些看似清晰的步骤会带来额外的清晰度。我倾向于能够逐字编写代码并使其工作。我能预见很多种方式。但不可避免的是,如果我仍然对一个项目感兴趣并继续开发它,我至少需要一次大的重写,有时甚至需要两次才能满意。
上面的讨论旨在阐明创建类库的决定,为什么您会这样做以及为什么您应该这样做。然而,只有一项基本决定,即代码可以被成功重用,无论是由您还是其他开发者。
我采取的第一个步骤是向我的项目添加一个类(DLL)库模块。然后我将我的绘图模块的代码复制过来(它已经整理好并且完全由参数驱动)。如果您还没有将代码收集起来并使其独立于本地环境,那么请先这样做。也就是说,模块不应该访问本地窗体或数据。它们确实访问的数据应该被收集起来,并可能包含在一个或两个结构中,这些结构将驻留在类库中。这些可以暴露给用户。您不必为类中的所有数据构建方法,但这可能是一个好习惯。它能让您的模块看起来非常专业,并组织好使用方式。另外,尽可能尝试将字段类型化为 .NET 类型。如果您指定了一个带有枚举的类型,您将收到提示。一个简单的例子是 Boolean
。您会被提示输入 True
或 False
。如果您输入 System.Drawing.Drawing2d.HatchStyle
,您将得到 52 个枚举可供选择;System.Color
有 100 个(?)。
一旦代码工作正常,我创建了一个单独的类项目,并从我的项目中删除了代码。在调试过程中,我将我的原始项目添加到了类项目中进行测试。一切正常后,我删除了原始项目并单独构建了 DLL。
然后将引用添加到原始项目中。测试它,然后构建/发布并测试。您应该会在发布的构建中看到已部署的 DLL。
我发现这里唯一的诀窍是声明您的例程为 Shared
。如果它们不是 Shared
,当您尝试访问 **您的** 命名空间时,它们将不会在该对象中暴露。您可以在 DLL 的属性中指定您的命名空间。实际上,这一切都非常简单。您将使用 NAMESPACE.MODULENAME 来访问您的代码。
附注:为了获得更专业的外观和感觉,您可以为您的类库添加 IntelliSense 注释。如果您在类结构、子程序或例程上面的行中输入 '''(三个单引号),将打开一个 XML 大纲,您可以在其中放置摘要注释,这些注释将成为当从您的命名空间中选择该项时工具提示的一部分。