引用:
const用 const 修饰符声明的成员叫常量,是在编译期初始化并嵌入到客户端程序static readonly用 static readonly 修饰符声明的成员依然是变量,只不过具有和常量类似的使用方法:通过类进行访问、初始化后不可以修改。但与常量不同的是这种变量是在运行期初始化测试类:using System;
using System.Collections.Generic;
using System.Text;namespace Example02Lib
{
public class Class1
{
public const String strConst = "Const";
public static readonly String strStaticReadonly = "StaticReadonly";
}
}客户端代码using System;
using System.Collections.Generic;
using System.Text;
using Example02Lib;namespace Example02
{
class Program
{
static void Main(string[] args)
{
//修改Example02中Class1的strConst初始值后,只编译Example02Lib项目
//然后到资源管理器里把新编译的Example02Lib.dll拷贝Example02.exe所在的目录,执行Example02.exe
//切不可在IDE里直接调试运行因为这会重新编译整个解决方案!! //可以看到strConst的输出没有改变,而strStaticReadonly的输出已经改变
//表明Const变量是在编译期初始化并嵌入到客户端程序,而StaticReadonly是在运行时初始化的
Console.WriteLine("strConst : {0}", Class1.strConst);
Console.WriteLine("strStaticReadonly : {0}", Class1.strStaticReadonly); Console.ReadLine();
}
}
}
运行结果:
strConst : Const
strStaticReadonly : StaticReadonly 如果测试类代码为using System;
using System.Collections.Generic;
using System.Text;namespace Example02Lib
{
public class Class1
{
public const String strConst = "Const1";
public static readonly String strStaticReadonly = "StaticReadonly1";
}
}第二次运行结果:
strConst : Const
strStaticReadonly : StaticReadonly1我想知道为什么? 为什么会出现第二次运行结果?
const用 const 修饰符声明的成员叫常量,是在编译期初始化并嵌入到客户端程序static readonly用 static readonly 修饰符声明的成员依然是变量,只不过具有和常量类似的使用方法:通过类进行访问、初始化后不可以修改。但与常量不同的是这种变量是在运行期初始化测试类:using System;
using System.Collections.Generic;
using System.Text;namespace Example02Lib
{
public class Class1
{
public const String strConst = "Const";
public static readonly String strStaticReadonly = "StaticReadonly";
}
}客户端代码using System;
using System.Collections.Generic;
using System.Text;
using Example02Lib;namespace Example02
{
class Program
{
static void Main(string[] args)
{
//修改Example02中Class1的strConst初始值后,只编译Example02Lib项目
//然后到资源管理器里把新编译的Example02Lib.dll拷贝Example02.exe所在的目录,执行Example02.exe
//切不可在IDE里直接调试运行因为这会重新编译整个解决方案!! //可以看到strConst的输出没有改变,而strStaticReadonly的输出已经改变
//表明Const变量是在编译期初始化并嵌入到客户端程序,而StaticReadonly是在运行时初始化的
Console.WriteLine("strConst : {0}", Class1.strConst);
Console.WriteLine("strStaticReadonly : {0}", Class1.strStaticReadonly); Console.ReadLine();
}
}
}
运行结果:
strConst : Const
strStaticReadonly : StaticReadonly 如果测试类代码为using System;
using System.Collections.Generic;
using System.Text;namespace Example02Lib
{
public class Class1
{
public const String strConst = "Const1";
public static readonly String strStaticReadonly = "StaticReadonly1";
}
}第二次运行结果:
strConst : Const
strStaticReadonly : StaticReadonly1我想知道为什么? 为什么会出现第二次运行结果?
Console.WriteLine("strConst : {0}", Class1.strConst);在编译时变成
Console.WriteLine("strConst : {0}", "Const");
可是拷贝过去的时候,dll中的Class1.strConst值已经是"Const1"了呀,为何编译器还认为是 "Const"?
这个有点不理解
单单以下一行,需要用到Class1吗?
Console.WriteLine("strConst : {0}", "Const");
编译器是用来生成代码的啊,可是Example02Lib.DLL不是已经是二进制文件,修改后的变量strConst的值不已经是“Const1”,客户端记录的值怎么还是“Const”,有点想不通啊!
编译期初始化也应该是dll编译啊