C#中的readonly和const关键字
C#中的readonly和const关键字
public class MathUtitlity
{
public const double PI = 3.14;
public readonly double E = 2.782;
}
class Program
{
static void Main(string[] args)
{
MathUtitlity math = new MathUtitlity();
math.E = 2.5;//编译错误,不能改变已经初始化的readonly字段
MathUtitlity.PI = 3.1456;//编译错误,不能改变已经初始化的const 字段
}
}
//定义Person,有一个属性:name。
public class ConstReadonly
{
public const string _const="_const";
public readonly Person _readonly;
public ConstReadonly()
{
_readonly = new Person();
}
}
public class Person
{
public string name;
public Person()
{
this.name = "Untitled";
}
public Person(string name)
{
this.name = name;
}
}
class Program
{
static void Main(string[] args)
{
ConstReadonly cr = new ConstReadonly();
Console.WriteLine(cr._readonly.name);
cr._readonly.name = "Changed";
Console.WriteLine(cr._readonly.name);
}
}
//输出结果为:
//Untitled
//Changed
1. const 字段只能在该字段的声明中初始化。 readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。
2. const 字段是编译时常数,而 readonly 字段可用于运行时常数。
3. const 默认就是静态的,而 readonly 如果设置成静态的就必须显示声明。
4.const 对于引用类型的常数,可能的值只能是 string 和 null。readonly可以是任何类型