我不明白为什么在这种情况下不需要明确的参考:
//SomeStaticClass.cs
namespace WhyDontINeedUsingStatement {
public static class SomeStaticClass {
public static string Thingy {
get { return "Behold! A thingy!"; }
}
}
public class SomeNonStaticClass {
public void DoSomethingUseful() {
var foo = 9;
}
}
}
// /SomeNamespace/SomeBoringClass.cs
namespace WhyDontINeedUsingStatement.SomeNamespace {
public class SomeBoringClass {
public static void DoSomething() {
var whatever = SomeStaticClass.Thingy;
var blah = new SomeNonStaticClass();
blah.DoSomethingUseful();
}
}
}
为什么这不需要顶部的using WhyDontINeedUsingStatement
? Aren这些独立的命名空间,即使它们以相同的东西开头?
我认为C#名称空间与Java软件包完全不同(并且不会影响访问控制),但不是为什么第二类能够引用第一类的东西。
答案 0 :(得分:1)
根据C#语言规范版本5.0第9.2节,似乎在命名空间声明中使用.
是语法糖:
namespace-declaration的qualified-identifier可以是单个 标识符或由“。”标记分隔的标识符序列。该 后一种形式允许程序在没有的情况下定义嵌套的命名空间 词法上嵌套几个名称空间声明。例如,
namespace N1.N2
{
class A {}
class B {}
}
在语义上等同于
namespace N1
{
namespace N2
{
class A {}
class B {}
}
}
因此,从N2
内部您可以看到N1
,因此您可以使用它。