假设
a) 什么是指
b) 命名空间
顺便说一下-我确实了解命名空间,只是对我的书使用的术语感到困惑(即,A2是A1的成员等)。
编辑
1)因此,
下面的应用程序
以下应用程序
a) 当我们试图在
b) 另外,如果
命名空间A2
嵌套在命名空间A1
中,则A2
是封闭的A1
的成员。但是A2
中声明的类型(因此在A2
中声明的类型)不是A1
的成员。a) 什么是指
A2
的成员不是A1
的成员?换句话说,如果它们也是A1
的成员,会有什么不同?也许在A1
内部,我们不必为在A2
中定义的类型使用完全限定名称?b) 命名空间
A2
成为A1
的成员是什么意思?顺便说一下-我确实了解命名空间,只是对我的书使用的术语感到困惑(即,A2是A1的成员等)。
编辑
1)因此,
A2
成为A1
的成员是A1
内部不需要为引用在A2
中声明的类型指定A1.前缀
的原因:namespace A1
{
class Program
{
static void Main(string[] args)
{
A2.classA2 a2= A2.classA2(); //here we don't need to include A1.
prefix
}
}
namespace A2
{
class classA2 { }
}
}
2) 以下内容在 assembly asmLibrary.dll
中定义:
namespace A
{
public class A1{}
namespace B
{
public class B1{}
}
}
下面的应用程序
App1
也引用了程序集 asmLibrary.dll
:namespace A
{
class Program
{
static void Main(string[] args)
{
B.B1 instanceB1 = new B.B1();
}
}
}
以下应用程序
App2
引用了程序集 asmLibrary.dll
:using A;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
A.B.B1 bInstance = new A.B.B1();
A1 a1 = new A1();
}
}
}
a) 当我们试图在
App2
中声明A.B.B1
的实例时,我们需要指定类型的完全限定名称。但是在App1
中,我们可以通过B.B1
指定类型。那么为什么我们可以在App1
中省略A.
前缀,而在App2
中却不能呢?(App2
有一个using A;
指令,因此其行为应与App1
相同。)b) 另外,如果
namespace B
是namespace A
的成员,那么App2
不应该允许我们使用B.B1 instanceB1 = new B.B1();
语法声明类型A.B.B1
吗?!
My.Namespace
和My.Namespace.Nested
。但是这对运行时给定类型没有影响。在运行时,命名空间只是一个字符串,可能有也可能没有.
。using
语句。Henk 的示例很好地说明了这一点。