“使用 MyNameSpace;”之间的区别和“命名空间 MyNameSpace”

Posted

技术标签:

【中文标题】“使用 MyNameSpace;”之间的区别和“命名空间 MyNameSpace”【英文标题】:Difference between "using MyNameSpace;" and "namespace MyNameSpace" 【发布时间】:2011-03-27 03:56:43 【问题描述】:

您好,我是 asp.net 的新手。我很困惑“使用 MyNameSpace;”之间的区别是什么?和“命名空间 MyNameSpace”。我的演示代码如下...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

使用MyNameSpace

命名空间 MyNameSpace


    public partial class DemoPage : System.Web.UI.Page
    
        My code here
    

在上面的代码中,两个突出显示的语句之间是否有任何区别。如果是,那是什么?

提前谢谢...

【问题讨论】:

【参考方案1】:

是的,他们提供补充服务。

这样的 using 指令:

using MyNamespace;

告诉编译器在解析简单名称时查看命名空间 MyNamespace - 因此,如果您有一个名为 MyNamespace.Foo 的类型,则可以在源代码中使用 Foo 来引用它使用指令。

然而,命名空间声明实际上是说,“我在这个块中声明的任何东西都在给定的命名空间中”。所以要声明 MyNamespace.Foo 类型,你可以使用:

namespace MyNamespace

    public class Foo
    
        ...
    

你看到了吗? using 指令表示您希望在特定命名空间中使用事物,而命名空间声明是关于将事物放入特定命名空间。

【讨论】:

感谢 Jon 的精彩解释。我现在明白了。【参考方案2】:

using 用于为该命名空间中的类型名创建“快捷方式”。仅当您编写的代码位于另一个名称空间中时才需要这样做。 namespace 用于定义一个命名空间:

示例 在文件first.cs:

// define the namespace "SomeNamespace"
namespace SomeNamespace

    // define a type within the namespace
    class SomeClass  

在文件second.cs:

using SomeNamespace;
// define the namespace "OtherNamespace"
namespace OtherNamespace

    class OtherClass
    
        void SomeMethod()
        
            // use the type "SomeClass", defined in the "SomeNamespace" namespace
            // note that without the using directive above we would need to write
            // SomeNamespace.SomeClass for this to work.
            SomeClass temp = new SomeClass();
        
    

在上面的代码示例中,temp 变量的声明不需要包含命名空间,因为它在 using 指令中被提及。

【讨论】:

【参考方案3】:

是的,有区别。 namespace 语句用于创建命名空间,而using 语句用于使编译器重新识别已经存在的命名空间。

在您的代码中,using 语句无效,因为您的所有代码都在该命名空间中,所以它已经知道了。

由于您有using System.Web.UI,所以System.Web.UI.Page 标识符可以写成Page,因为编译器知道该命名空间中的类。如果您没有 using 语句,则需要编译器的完全限定名称才能知道在哪里可以找到该类。

【讨论】:

以上是关于“使用 MyNameSpace;”之间的区别和“命名空间 MyNameSpace”的主要内容,如果未能解决你的问题,请参考以下文章

“干净数据缓存未命中”和“脏数据缓存未命中”之间的区别

keras 中全局池化层和(正常)池化层之间的区别

夺命雷公狗—JAVA---008---println和print的区别

终端(terminal)shelltty控制台(console)bash之间的区别与联系

diff(patch):比较两个文件之间的区别(补丁)

夺命雷公狗-----React---18--value和defaultValue的区别