试验1:
将下面的代码编译成一个程序集
using System;
namespace TestConst1
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
public class Component
{
//注意: c#不允许为常数指定static关键字
//因为常数隐含为static
public const int MaxEntriesInList = 50;
}
}
namespace TestConst1
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
public class Component
{
//注意: c#不允许为常数指定static关键字
//因为常数隐含为static
public const int MaxEntriesInList = 50;
}
}
将下面的程序编译成另外一个程序集:
using System;
using TestConst1;
namespace TestConst2
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class App
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
Console.WriteLine("Max entries supported in list: " + Component.MaxEntriesInList );
Console.ReadLine();
}
}
}
using TestConst1;
namespace TestConst2
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class App
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
Console.WriteLine("Max entries supported in list: " + Component.MaxEntriesInList );
Console.ReadLine();
}
}
}
运行TestConst2.App程序,运行结果如下:
Max entries supported in list: 50
试验2:
将第一个程序集改成:
using System;
namespace TestConst1
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
public class Component
{
//注意: c#不允许为常数指定static关键字
//因为常数隐含为static
public const int MaxEntriesInList = 100;
}
}
namespace TestConst1
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
public class Component
{
//注意: c#不允许为常数指定static关键字
//因为常数隐含为static
public const int MaxEntriesInList = 100;
}
}
编译该程序集。
然后直接运行TestConst2.App,运行结果如下:
Max entries supported in list: 50
可以发现,运行结果没有变。
[问]为什么没有变那?
[答]这跟.net中对于常量的处理方法有关,当编译器编译代码的时候,遇见常量,就会用常量的值代替变量MaxEntriesInList,然后直接访问这个值,所以,访问常量是不需要内存的。这个时候,就是指示常量的那个变量的值发生了变化,也不会对已经编译好的程序集发生影响。
试验3:
重新编译TestConst2.App,然后运行,结果如下:
Max entries supported in list: 100
试验4:
将第一个程序集改成:
using System;
namespace TestConst1
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
public class Component
{
//注意: c#不允许为常数指定static关键字
//因为常数隐含为static
public const int MaxEntriesInList = 500;
}
}
namespace TestConst1
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
public class Component
{
//注意: c#不允许为常数指定static关键字
//因为常数隐含为static
public const int MaxEntriesInList = 500;
}
}
不编译该程序集。
然后编译TestConst2.App,运行结果如下:
Max entries supported in list: 100
可以发现,运行结果没有变。
试验5:
将第一个程序集改成:
using System;
namespace TestConst1
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
public class Component
{
//注意: c#不允许为常数指定static关键字
//因为常数隐含为static
public const int MaxEntriesInList = 600;
}
}
namespace TestConst1
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
public class Component
{
//注意: c#不允许为常数指定static关键字
//因为常数隐含为static
public const int MaxEntriesInList = 600;
}
}
不编译该程序集。
但是将TestConst2的依赖项选中TestConst1
然后编译TestConst2.App,运行结果如下:
Max entries supported in list: 600
可以发现,运行结果发生了变化。而且在编译TestConst2的过程中,编译器先自动编译TestConst1,然后才编译TestConst2
浙公网安备 33010602011771号