C# using和namespace的关系
// 假设有这个 DLL namespace S7.Net { public class Plc { ... } } namespace MyPLCApp { // 如果没有 using 语句 S7.Net.Plc myPlc = new S7.Net.Plc(); // 完整路径 // 如果顶部有 using S7.Net; Plc myPlc = new Plc(); // 简短便捷 }
在C#中,namespace(命名空间)和 using(using指令) 的关系,就像“文件的完整路径”和“桌面快捷方式”:
-
namespace:定义一个 “地址”(逻辑容器),用来给类、接口等代码元素“归类”和“命名”,防止重名冲突。 -
using:导入一个 “地址”,让你在写代码时可以输入简称,而不必每次都敲完整的“路径”。
假设引用了 S7.Net 这个DLL,它的源码内部可能长这样:
// 1. 定义命名空间:相当于告诉编译器,这个类住在 "S7.Net" 这栋楼里 namespace S7.Net { public class Plc { public bool Connect(string ip) { ... } } } // 另一个公司也可能叫 Plc,但住在不同的命名空间里,这样就不冲突了 namespace Modbus.TCP { public class Plc { ... } // 虽然同名,但因为地址不同,编译器分得清 }
在你的控制台主程序(Program.cs)文件顶部,你会看到:
// 2. 使用 using 指令:相当于把“快捷方式”放在桌面上 using S7.Net; // 引用 S7.Net 这个地址 using System; // 引用微软的基础地址 namespace MyPLCTest // 你给自己的代码起的地址名 { class Program { static void Main() { // 因为有 using S7.Net; 我们可以直接写简称 Plc Plc myPlc = new Plc(); // 如果没有 using S7.Net; 就必须写全称(绝对路径),非常啰嗦: // S7.Net.Plc myPlc = new S7.Net.Plc(); } } }
在 VS 中,当你在文件顶部写这行时:using System;
它不是在“导入整个 System 文件夹里的所有文件”,而是在声明:“在这个文件里,当我写 String 时,请去 System 这个命名空间下找。” 它的生效范围仅限于当前这一个 .cs 代码文件。
using 的另一个“马甲”:你在看 S7.Net 官方示例时,可能还见过这种写法:
using (Plc myPlc = new Plc()) { myPlc.Connect("127.0.0.1"); }
这里的 using 与命名空间毫无关系!它在这里是资源释放语句,专门用来确保网络连接、文件流等用完后自动关闭,释放内存。你可以把它当成一个完全同名的不同功能,先记住这个区别就行。现在你只需要记住最上面讲的“地址和快捷方式”的关系,就足够开始写测试代码了。

浙公网安备 33010602011771号