因工作需要,初学C#,在理解C#的命名空间时遇到了一些小问题,搜索他人的博客做了简单了解,然后根据自己的理解进行了一些略微延申一些的测试,有一些心得,在此记录分享。
首先,第一层,命名空间是什么,借鉴别人的说法,命名空间就像是文件夹,而里面的类就像是文件,同一个文件夹下不能有同名文件,但是不同文件夹下则不影响,类比过来,便是不同命名空间中的类,无论名字是否相同,都不是一个东西。
废话说完了,上代码
using System;
namespace test12_19_1
{
class Program1
{
public int num = 100;
}
namespace testchild12_19
{
class Program1
{
public int num2 = 10;
public test12_19_1.Program1 testnum;
}
}
}
namespace test2018_12_19
{
class Program
{
static void Main(string[] args)
{
var a = new test12_19_1.Program1();
Console.WriteLine("{0}", a.num);
var b = new test12_19_1.testchild12_19.Program1();
b.testnum = new test12_19_1.Program1();
Console.WriteLine("{0}",b.num2);
Console.WriteLine("{0}", b.testnum.num);
Console.ReadKey();
}
}
}
运行结果:
代码中可以看到,在我的测试命名空间中又嵌套了一个新的命名空间,两个命名空间都有一个名字为Program1的类,但我在打印输出的时候,得到的值确实不同的。以此可见,不同命名空间的类,是不相同的,即使其嵌套在了一起。
好了,上面的知识网上一堆,下面的是我自己在测试的时候遇到的问题,特此分享;
不知道大家有没有主意到这一行,我在位于testchild12_19命名空间的类Program1中声明了一个Program1成员变量,然后见下图,
我在此处显式的为处于命名空间testchild12_19的b实例的testnum成员实例化了test12_19_1命名空间中的类,这里有一个问题,之前一直在报错,本来以为子命名空间实例化之后,对应的父目录命名空间中的类也会全部创建出来,事实证明,我太天真,如果没有这一行,会报错,我的b.testnum为空,即使子命名空间里的类已经成功实例化,要想在该类中调用父命名空间的类成员变量依旧需要将其父命名空间的类实例化。从另一个方面再一次诠释了,不同命名空间下的类是完全没有任何联系的两个东西,想用,先new再说!