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 与命名空间毫无关系!它在这里是资源释放语句,专门用来确保网络连接、文件流等用完后自动关闭,释放内存。你可以把它当成一个完全同名的不同功能,先记住这个区别就行。现在你只需要记住最上面讲的“地址和快捷方式”的关系,就足够开始写测试代码了。

 

posted @ 2026-07-22 15:33  古路无行客  阅读(2)  评论(0)    收藏  举报