情景:
假设我想定义自己的类。
public class Person
{
}
我希望将它放在命名空间系统中。
注意:我没有在顶部添加指令“using System
”..
namespace System
{
public class Person
{
public void Display()
{
Console.WriteLine("I am mine");
}
}
}
虽然我没有在顶部包含using System;
指令,但我仍然可以在我的方法中访问System.Console.WriteLine
,因为我声明的命名空间是System
。
这怎么可能?它是怎么回事?
答案 0 :(得分:8)
如果声明名称空间Foo.Bar.Baz
,则在从该名称空间声明中引用类型时,将搜索该层次结构中的每个名称空间(Foo
,Foo.Bar
和Foo.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节。
但是,我希望你不认真考虑使用它作为一种避免添加使用指令的方法。在System命名空间层次结构中创建自己的类型是一个非常糟糕的主意。
答案 1 :(得分:1)
在同一名称空间中不需要using指令。
如果在System中声明您的类,则“使用System;”是隐含的。
但是,这可能不是你应该把你的课程放在哪里。
答案 2 :(得分:1)
因为您已在System
命名空间中定义了类型,所以您可以访问System
命名空间中定义的所有其他类型。
同样,如果您在System.Data
中定义了自己的课程,则可以访问System
和System.Data
,而无需使用明确的使用语句。
命名空间可能跨程序集重复。
请注意,在同一名称空间中定义类型不会授予您访问在同一名称空间中定义但具有不同程序集的类型的内部成员的权限。
答案 3 :(得分:0)
在命名空间内声明的任何内容都可以访问同一命名空间中的所有其他类(前提是您具有对包含该命名空间和那些类的程序集的引用)。
答案 4 :(得分:0)
答案 5 :(得分:0)
这是因为您已将您的类声明为命名空间的一部分,因此它会自动包含它的程序集。
同样,项目命名空间中的任何文件都不需要将其声明为使用该项目命名空间。