C#基础(⑥动态链接库DLL)
DLL 是封装好的「功能集合」
它不只是单个方法,通常包含多个类、函数、资源(如图标、字符串)等,形成一个完整的功能模块。例如一个处理 Excel 的 DLL,可能包含「读取表格」「写入数据」「设置样式」等一系列相关功能。
是否能看到源码,取决于是否开源
大部分商业 DLL 或系统 DLL:看不到源码(比如 Windows 自带的kernel32.dll、某些付费 SDK 的 DLL),它们以二进制形式发布,只能通过文档知道如何调用。
开源项目的 DLL:如果作者开源了代码(如Newtonsoft.Json.dll的源码在 GitHub 上可查),则能看到实现逻辑,只是使用时依然以编译后的 DLL 形式引用。
就像你用手机 APP 时,不需要知道 APP 的代码怎么写,只要会按按钮用功能就行 ——DLL 的核心价值就是「隐藏复杂实现,只暴露简单的调用接口」,让开发者专注于自己的业务逻辑。
动态链接库(DLL)是 Windows 系统及基于.NET 等框架开发中广泛使用的文件格式,用于封装可重用的代码、资源和功能,供多个程序共享调用。以下从系统级 DLL、.NET 框架核心 DLL、第三方常用 DLL三个维度,介绍常见的 DLL 及其功能,帮助你理解它们的作用:
一、系统级 DLL(Windows 自带,底层功能支持)
这些 DLL 由 Windows 系统提供,支撑操作系统的核心功能,可被各种编程语言(包括 C#)调用,实现与系统交互。
DLL 文件名 | 主要功能 | 应用场景举例 |
---|---|---|
kernel32.dll | 操作系统核心功能:内存管理、进程 / 线程控制、文件操作、时间函数等。 | 用 C# 调用 CreateFile 函数操作文件句柄,或通过 Sleep 函数实现程序延迟。 |
user32.dll | 用户界面相关:窗口创建、消息处理、键盘鼠标输入、菜单 / 对话框管理等。 | 调用 MessageBox 显示系统级弹窗,或 SetWindowText 动态修改窗口标题。 |
gdi32.dll | 图形设备接口:绘图、字体管理、图像渲染、打印等。 | 绘制图形、处理字体样式,或实现自定义控件的视觉效果。 |
advapi32.dll | 高级 Windows API:安全认证、注册表操作、服务管理等。 | 读写 Windows 注册表,或验证用户权限(如管理员身份)。 |
ole32.dll | OLE(对象链接与嵌入)技术:组件对象模型(COM)交互、剪贴板、拖放功能等。 | 实现程序间的数据拖放,或调用 COM 组件(如 Excel 自动化)。 |
二、.NET 框架核心 DLL(C# 开发的基础依赖)
.NET 框架(包括.NET Framework、.NET Core/.NET 5+)的核心功能通过一系列 DLL 封装,是 C# 开发的基础。
DLL 文件名 | 所属框架 / 版本 | 主要功能 |
---|---|---|
mscorlib.dll | .NET Framework | 包含.NET 的核心类型(如 int 、string )、基础类(Object 、Array )、异常处理、垃圾回收机制等,是所有.NET 程序的必依赖。 |
System.dll | .NET Framework | 提供系统级功能:字符串处理(String )、集合类(List<T> )、IO 操作(File )、XML 处理等。 |
System.Core.dll | .NET Framework 3.5+ | 引入 LINQ(IEnumerable<T> )、Lambda 表达式支持、泛型高级功能,是 C# 3.0 + 语法的核心依赖。 |
System.Runtime.dll | .NET Core/.NET 5+ | 替代.NET Framework 的 mscorlib.dll ,包含.NET Core 的基础类型和运行时功能,适配跨平台(Windows、Linux、macOS)。 |
System.Data.dll | 所有.NET 版本 | 数据访问功能:数据库连接(SqlConnection )、数据读取(DataReader )、数据集(DataSet )等,支持 SQL Server 等数据库操作。 |
System.Windows.Forms.dll | .NET Framework | Windows 窗体应用(WinForms)的核心:窗体(Form )、控件(Button 、TextBox )、事件处理等,用于开发桌面 GUI 程序。 |
PresentationFramework.dll | .NET Framework/WPF | WPF(Windows Presentation Foundation)的核心:XAML 解析、界面渲染、数据绑定等,用于开发更现代化的桌面应用。 |
三、第三方常用 DLL(扩展功能,提高开发效率)
开发者或厂商提供的 DLL,封装了特定领域的功能,可直接引用以避免重复开发。
典型 DLL / 库名称 | 开发者 / 来源 | 主要功能 | 应用场景 |
---|---|---|---|
Newtonsoft.Json.dll | James Newton-King | JSON 序列化与反序列化(将对象转为 JSON 字符串,或反之)。 | 接口数据传输(如 WebAPI 交互)、配置文件读写(JSON 格式)。 |
NLog.dll /log4net.dll | 开源社区 | 日志记录工具:支持输出日志到文件、数据库、控制台,可配置日志级别(DEBUG/INFO/ERROR)。 | 程序调试、错误追踪(如记录用户操作日志、系统异常信息)。 |
MathNet.Numerics.dll | MathNet 开源项目 | 数学计算库:线性代数、微积分、统计分析、傅里叶变换等高级数学运算。 | 科学计算、数据分析、工程模拟等场景。 |
EPPlus.dll | 开源社区 | Excel 文件操作(.xlsx 格式):读取、写入、修改 Excel 表格,支持公式、样式设置。 | 批量生成报表、导入导出 Excel 数据(如财务数据统计)。 |
RestSharp.dll | 开源社区 | HTTP 客户端工具:简化 RESTful API 调用,支持 GET/POST 请求、参数传递、响应处理。 | 调用第三方接口(如支付接口、天气 API)、开发爬虫获取网页数据。 |
OpenCvSharp.dll | 基于 OpenCV 的 C# 封装 | 计算机视觉库:图像识别、人脸识别、边缘检测、视频处理等。 | 开发安防监控系统、图像编辑工具、AR 应用等。 |