【问题标题】:Namespace and Sub Namespaces命名空间和子命名空间
【发布时间】:2010-10-20 14:43:43
【问题描述】:

有没有办法使用命名空间,然后让它自动使用所有子命名空间?

例子:

namespace Root.Account
{
//code goes here
}

namespace Root.Orders
{
//code goes here
}


//New File:
using Root;

为了让我使用 Root.Account 中的代码,我需要将 using Root.Account 添加到我的代码中。

我希望能够只说 using Root 并让它选择任何子命名空间类以供使用。

如果这是有道理的,这可能吗?

谢谢

【问题讨论】:

  • 你到底想达到什么目的?

标签: c# namespaces


【解决方案1】:

不,在树下没有任何作用。但是,您不需要包含 using 指令来up 树。换句话说,如果你使用:

namespace Root.Orders
{
    // Code
}

那么Root 中的任何类型都已经可见。

【讨论】:

  • 好吧,这很有趣。所以假设我有一个命名空间 Root.Orders.OrderItems 并且我在我的指令中使用了它,我将能够使用 Root 和 Root.Orders 中的任何类?
  • 否 - 只有在您的类型命名空间层次结构中更靠前的命名空间才会被搜索。换句话说,具有此“功能”的是命名空间指令,而不是 using 指令。
【解决方案2】:

不,C# 中的 using 指令 does not allow 这个:

创建 using 指令以使用命名空间中的类型,而无需指定命名空间。 using 指令不允许您访问嵌套在您指定的命名空间中的任何命名空间。

然而,VB.NET,supportsImports 语句的行为更接近:

Imports 语句提供的元素的范围取决于您在使用 Imports 语句时的具体程度。例如,如果只指定了一个命名空间,则该命名空间的所有唯一命名的成员以及该命名空间内的模块成员都可以无条件使用。如果同时指定了命名空间和该命名空间的元素名称,则只有该元素的成员才可用,无需限定。

也就是说,如果你说

Imports Root

那么你就可以说Orders.Whatever

【讨论】:

    【解决方案3】:

    从您提出原始问题的方式来看,您可能会或可能不会意识到仅使用以下内容:

    using Root;
    

    您稍后澄清代码的方式是:

    Account.Class obj = new Account.Class();
    Orders.Class obj = new Orders.Class();
    

    您不必使用 Root.Account 来访问代码,Root.Orders 也是如此。 除此之外,没有办法自动递归地使用命名空间。我认为这会导致滥用 System;

    【讨论】:

      【解决方案4】:

      不,不是真的。 =)

      【讨论】:

        【解决方案5】:

        .NET/C# 不支持这种形式的命名空间使用。

        【讨论】:

          【解决方案6】:

          如果我理解正确,您的层次结构如下所示

          namespace Root
          {
            namespace Root.Account
            {
               public class A{}
            }
          
            namespace Root.Orders
            {
              public class B{}
            }
          }
          

          你能做的是

          using Root = Root;
          

          然后访问子命名空间中的类,如

          var myClassA = Root.Account.A();
          

          var myClassB = Root.Orders.B();
          

          更多信息,您可以阅读Microsoft docs about namespaces

          【讨论】:

            【解决方案7】:

            命名空间就像一个对象容器。它们可能包含联合、结构、类、委托和接口。 Asp.net C#中命名空间的主要作用是创建程序的分层组织。

            了解更多博客...http://asp-net-by-parijat.blogspot.in/2015/08/what-is-namespace-in-c-need-of.html

            【讨论】:

            • 您提供了一个问题的答案,该问题在 6 年前就已经有了答案。这没有帮助。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-05-24
            相关资源
            最近更新 更多