显示页面讨论反向链接回到顶部 本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。 ====== 代码抽离 (Code Extraction) ====== **核心概念**: 随着程序功能的增加,如果所有代码都写在 `Program.cs` 或同一个文件中,代码会变得非常臃肿、难以维护。 **代码抽离**就是将不同功能的代码提取出来,放入单独的类(Class)或单独的项目(类库 DLL)中。 ===== 创建一个次类 ===== 在同一个项目中,我们可以通过添加新的类文件来分离代码。 **操作步骤:** - 在“解决方案资源管理器”中,右键点击项目名称(例如 `HelloWorldCS`)。 - 选择 **添加 (Add)** -> **类 (Class)**。 - 输入类名(例如 `InfoDisplay.cs`),点击确定。 <code csharp> using System; namespace CodeExtraction { // 定义一个次类 (Sub-class) // 注意:类必须是 public 的,才能被其他地方访问 public class InfoDisplay { // 定义一个方法 // 3个参数的示例方法 public void Show_MAX_Pipou(string a1, string a2, string a3) { Console.WriteLine("参数1: " + a1); Console.WriteLine("参数2: " + a2); Console.WriteLine("参数3: " + a3); } } } </code> ===== 主类中调用次类 ===== 在主程序(`Program.cs`)中,要使用上面创建的类,通常需要**实例化**(创建对象)。 **关键点:** * 必须确保主类和次类在同一个命名空间下,或者使用 `using` 引用了次类的命名空间。 * 使用 `new` 关键字创建对象。 <code csharp> using System; namespace CodeExtraction { class Program { static void Main(string[] args) { string a1 = "23", a2 = "25", a3 = "27"; // 1. 实例化对象 (创建一个英雄叫雷神) // 语法:类名 变量名 = new 类名(); InfoDisplay LeiShen = new InfoDisplay(); // 2. 调用次类中的方法 LeiShen.Show_MAX_Pipou(a1, a2, a3); Console.ReadKey(); } } } </code> ===== 主类中直接使用次类变量 (Static) ===== 如果次类中的变量或方法被 `static` (静态) 关键字修饰,则在主类中**无需实例化**,可以直接通过**类名**点出来使用。 **次类修改:** <code csharp> public class InfoDisplay { // 定义一个静态变量 // static 意味着这个变量属于“类”本身,而不是某个“对象” public static int num; // 中间缓存 (非静态变量可以使用静态变量) int num1 = num; // ... 其他方法 } </code> **主类调用:** <code csharp> class Program { static void Main(string[] args) { // 直接使用子类的变量,无需 new InfoDisplay() InfoDisplay.num = 1000; Console.WriteLine("静态变量值: " + InfoDisplay.num); } } </code> ===== 文件 [程序打包引用] ===== **概念类比**: DLL (Dynamic Link Library) 文件类似于 PLC 编程中的 **FB块 (功能块)** 封装。 * 你将一段逻辑写好、封装起来。 * 导出成一个文件 (.dll)。 * 其他程序导入这个文件,就可以直接使用里面的功能,而不需要知道里面的源代码。 **注意:** DLL 文件本质就是**类库**文件。 在编写类库时,**类 (class)** 和 **字段/方法** 前面必须加 `public`,否则外部程序无法访问。 ==== 创建类库文件及程序 ==== **操作步骤:** - 打开 Visual Studio,新建项目。 - 选择 **类库 (.NET Core)** 或 **类库 (.NET Framework)** (Class Library)。 - 命名项目(例如 `DllTestDemo`)。 ==== 100-4-2:编译生成 DLL 文件 ==== 编写好类库代码后,需要编译生成 `.dll` 文件。 **类库代码示例 (Class1.cs):** <code csharp> using System; namespace DllTestDemo // 保持命名空间与项目名一致,方便识别 { public class Class1 { // 一个计算方法示例 public int Jishuan(int a, int b, int g) { return a + b + g; } } } </code> **生成步骤:** - 在顶部菜单栏点击 **生成 (Build)** -> **生成解决方案 (Build Solution)**。 - 成功后,进入项目文件夹:`bin` -> `Debug` -> `netcoreappX.X` (或 netframework)。 - 找到生成的 **`DllTestDemo.dll`** 文件。 ==== 主程序添加引用 DLL 文件 ==== 如果一个项目使用了 DLL 文件,单独把生成的 `.exe` 放到桌面是不能运行的,必须把 `.dll` 和 `.exe` 放在一起。 **引用步骤:** - 打开你的**主程序**项目(控制台应用程序)。 - 在“解决方案资源管理器”中,右键点击 **依赖项 (Dependencies)** 或 **引用 (References)**。 - 选择 **添加引用 (Add Reference)** -> **浏览 (Browse)**。 - 找到刚才生成的 `DllTestDemo.dll` 文件并添加。 **主程序代码调用:** <code csharp> using System; // 这里的命名空间通常与你的主程序一致 namespace TestDllUsage { class Program { static void Main(string[] args) { // 使用 DLL 文件名(命名空间) + 类名 来实例化对象 // 这里的 DllTestDemo 是 DLL 项目的命名空间 DllTestDemo.Class1 DD = new DllTestDemo.Class1(); int a = 5, b = 3, g = 5; // 调用 DLL 中的方法 int kar = DD.Jishuan(a, b, g); Console.WriteLine("计算结果: " + kar); Console.ReadKey(); } } } </code> 登录 Detach Close 该主题尚不存在 您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。 csharp/代码抽离.txt 最后更改: 2025/11/27 12:51由 张叶安 登录