const 在任何时候都不变,如果是 using System; namespace Program1 { public class A { public contst int X = 1; } } namespace Program2 { class Test { static void Main() { Console.WriteLine(Program1.A.X); } } }在任何情况下输出都是 X当前的值 ,不论是否重新编译了Program2。比如修改为contst int X = 2;输出为2 using System; namespace Program1 { public class A { public static readonly int X = 1; } } namespace Program2 { class Test { static void Main() { Console.WriteLine(Program1.A.X); } } }上面这种情况如果不重新编译Program2,而直接把Program1修改为public static readonly int X = 2; 输出仍然是1
HNU(為楚有材,於斯為盛!) ,你好,感谢您的回答,但是您的说法似乎和我自己做的试验恰恰相反,不知道是什么原因? 我是这样做的:把program1和program2分别放在两个源文件中,将program1编译成dll文件,在program2中使用这个dll。如果采用read only方式,program1改变x的值后,再运行program2,输出就是变化后的值;如果采用const int 定义,program1改变x的值后,再运行program2,输出不变。(都是在program2没有重新编译的情况)。请你再试一试好吗?谢谢!
这是MSDN文档的解释 class MyClass { public int x; public readonly int y = 25; // Initialize a readonly field public readonly int z; public MyClass() { z = 24; // Initialize a readonly instance field } public MyClass(int p1, int p2, int p3) { x = p1; y = p2; z = p3; } } 注意 readonly 关键字与 const 关键字不同。const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。另外,const 字段是编译时常数,而 readonly 字段可用于运行时常数,如下例所示: public static readonly uint l1 = (uint) DateTime.Now.Ticks;
是这样的,const是编译期常量,也就是说在编译的时候,使用const变量的地方会被替换成相应的值,比如:const int i = 100; j = i;以上代码会被直接编译成 j = 100;所以当const int i = 100被编译成一个dll里,即使i的值改变了,也不是影响j=i;的结果,因为在编译时这句话已经变成了 j = 100; 和i 没有关系了。
using System;
namespace Program1
{
public class A
{
public contst int X = 1;
}
}
namespace Program2
{
class Test
{
static void Main() {
Console.WriteLine(Program1.A.X);
}
}
}在任何情况下输出都是 X当前的值 ,不论是否重新编译了Program2。比如修改为contst int X = 2;输出为2
using System;
namespace Program1
{
public class A
{
public static readonly int X = 1;
}
}
namespace Program2
{
class Test
{
static void Main() {
Console.WriteLine(Program1.A.X);
}
}
}上面这种情况如果不重新编译Program2,而直接把Program1修改为public static readonly int X = 2;
输出仍然是1
我是这样做的:把program1和program2分别放在两个源文件中,将program1编译成dll文件,在program2中使用这个dll。如果采用read only方式,program1改变x的值后,再运行program2,输出就是变化后的值;如果采用const int 定义,program1改变x的值后,再运行program2,输出不变。(都是在program2没有重新编译的情况)。请你再试一试好吗?谢谢!
{
public int x;
public readonly int y = 25; // Initialize a readonly field
public readonly int z; public MyClass()
{
z = 24; // Initialize a readonly instance field
} public MyClass(int p1, int p2, int p3)
{
x = p1;
y = p2;
z = p3;
}
}
注意 readonly 关键字与 const 关键字不同。const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。另外,const 字段是编译时常数,而 readonly 字段可用于运行时常数,如下例所示:
public static readonly uint l1 = (uint) DateTime.Now.Ticks;
ReadOnly 在程序运行期间你能给他一个值,但不能在改变他;
csc /target:library Program1.cs
csc /reference:Program1.dll Program2.cs
然后运行Program2就行了
j = i;以上代码会被直接编译成 j = 100;所以当const int i = 100被编译成一个dll里,即使i的值改变了,也不是影响j=i;的结果,因为在编译时这句话已经变成了 j = 100; 和i 没有关系了。