【问题标题】:Making use of inbuilt namespaces in C#在 C# 中使用内置命名空间
【发布时间】:2009-06-10 06:28:36
【问题描述】:

场景:

假设我想定义自己的类。

public class Person
{
}

我希望把它放在命名空间系统中。

注意:我没有在顶部包含指令'using System'..

namespace System
{
    public class Person
    {
        public void Display()
        {
            Console.WriteLine("I am mine");
        }
    }
} 

虽然我没有在顶部包含using System; 指令,但我仍然可以在我的方法中访问System.Console.WriteLine,因为我声明的命名空间是System

这怎么可能?进展如何?

【问题讨论】:

  • mscorlib.dll 自动可用。因此,即使您不添加“使用系统;”它可供您的班级使用。
  • @shahkalpesh 并非如此。您可以在没有特定“使用”语句的情况下使用的唯一类型是 C# 别名类型,例如 int/string/object/etc
  • 这也不是真的,因为它有效:global::System.Console.WriteLine("Testing, 1, 2, 3...");
  • 请注意 using 指令与命名空间有关,而 mscorlib.dll 是一个程序集。它们是非常不同的概念。
  • @Jon:你是对的。然而,系统命名空间和控制台类是 mscorlib.dll 的一部分。作为基础程序集(包含对象),默认情况下它是可用的。我说错了吗?

标签: .net namespaces


【解决方案1】:

如果您声明命名空间 Foo.Bar.Baz,则当您从该命名空间声明中引用类型时,将搜索该层次结构中的每个命名空间(FooFoo.BarFoo.Bar.Baz):

namespace Foo.Bar.Baz
{
    class Test
    {
        static void Main()
        {
            // This will search for Foo.Bar.Baz.SomeType,
            // Foo.Bar.SomeType, Foo.SomeType, SomeType,
            // in that order
            SomeType.StaticMethod();
        }
    }
}

有关详细信息,请参阅 C# 3.0 语言规范的第 3.8 节。

但是,我希望您不要认真考虑使用此方法来避免添加 using 指令。在 System 命名空间层次结构中创建自己的类型是一个非常糟糕的主意。

【讨论】:

    【解决方案2】:

    您不需要在同一命名空间内使用 using 指令。

    如果您在 System 中声明您的类,则“使用 System;”是隐含的。

    但是,这可能不是您应该放置课程的地方。

    【讨论】:

      【解决方案3】:

      因为您已经在 System 命名空间中定义了您的类型,所以您可以访问在 System 命名空间中定义的所有其他类型。

      同样,如果您在 System.Data 中定义了您的类,您将可以访问 SystemSystem.Data 而无需显式 using 语句。

      命名空间可能在程序集之间重复。

      请注意,在同一命名空间中定义您的类型并不授予您访问在同一命名空间但不同程序集中定义的类型的内部成员的权限。

      【讨论】:

        【解决方案4】:

        在命名空间内声明的任何内容都可以访问同一命名空间中的所有其他类(前提是您具有对包含该命名空间和这些类的程序集的引用)。

        【讨论】:

          【解决方案5】:

          Namespaces implicitly have public access,这是不可修改的。

          【讨论】:

            【解决方案6】:

            这是因为您已将您的类声明为命名空间的一部分,因此它会自动包含它的程序集。

            同样,项目命名空间中的任何文件都不需要将其声明为使用该项目命名空间。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-05-05
              • 2011-01-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-07-17
              • 2011-07-15
              相关资源
              最近更新 更多