一直以来,学习c#有个问题困惑着我。到底是程序集,用vs.net生成的一个项目就是一个程序集吗?
直到几天,我终于弄清楚了。谢谢,c# Primer Plus这本书,有它真好。
一个.cs的源文件构成了一个编译单元,而一个或几个编译单元可以生成一个程序集。程序集可以是.dll文件,也可以是.exe文件。一个编译单元可以引用程序集,来生成另外一个程序集。
如果这里有两个编译单元:
类1(a.cs):
类2(b.cs):
上面类1定义成了internal,如果你使用一下的命令:
csc /t:library a.cs
csc /r:a.dll b.cs
然后运行b.exe,这样是不能类1的,因为上面的命令把a.cs编译成了一个程序集,最后又把b.cs定义成了一个程序集,由于类1是internal修饰的,所以类2是不能访问类1的。
如果你使用一下命令:
csc a.cs b.cs
那么运行b.exe,这样是可以正常的运行的,因为你执行上面的命令是把a.cs b.cs生成了一个程序集,在同一个程序集合用,类2是可以访问类1的。
直到几天,我终于弄清楚了。谢谢,c# Primer Plus这本书,有它真好。
一个.cs的源文件构成了一个编译单元,而一个或几个编译单元可以生成一个程序集。程序集可以是.dll文件,也可以是.exe文件。一个编译单元可以引用程序集,来生成另外一个程序集。
如果这里有两个编译单元:
类1(a.cs):
1
using System;
2
namespace a1
3
{
4
internal class myClass
5
{
6
public void print()
7
{
8
Console.WriteLine("this is myClass");
9
}
10
}
11
}
using System;2
namespace a13
{4
internal class myClass5
{6
public void print()7
{8
Console.WriteLine("this is myClass");9
}10
}11
} 1
using a1;
2
using System;
3
namespace a2
4
{
5
public class myClass2
6
{
7
public static void Main()
8
{
9
myClass c1=new myClass();
10
c1.print();
11
}
12
}
13
}
using a1;2
using System;3
namespace a24
{5
public class myClass26
{7
public static void Main()8
{9
myClass c1=new myClass();10
c1.print();11
}12
}13
}csc /t:library a.cs
csc /r:a.dll b.cs
然后运行b.exe,这样是不能类1的,因为上面的命令把a.cs编译成了一个程序集,最后又把b.cs定义成了一个程序集,由于类1是internal修饰的,所以类2是不能访问类1的。
如果你使用一下命令:
csc a.cs b.cs
那么运行b.exe,这样是可以正常的运行的,因为你执行上面的命令是把a.cs b.cs生成了一个程序集,在同一个程序集合用,类2是可以访问类1的。



浙公网安备 33010602011771号