readonly是可以运行时赋值,const则必须在声明时赋值,二者都是赋值后就不能再改变。
readonly所谓运行时赋值是指可以在声明时或者构造方法内进行初始化,在构造方法内赋值时可以使每个实例拥有不同的值,而const因为是声明时赋值,所以内容基本一致了。
const在赋值后仅能通过类调用,而无法通过实例去调用。
readonly在赋值后仅能通过实例去调用,而无法通过类调用
static是在类内共用同一个存储空间,属于类的属性而不是实例的属性,被static标识的类、方法、属性无法被实例化,只能直接被类本身或者类里的方法调用。所以使用static的字段,能在任意时间做修改,而且调用的实例和类对应的字段都会发生改变。
public class Person
{
public string name {get;set;}
public string sex {get;set;}
public string birthday {get;set;}
public const string con = "123";
public readonly string red;
public static string sta;
public Person()
{
red = "red";
}
public void ChangeSta(string str)
{
sta = str;
Console.WriteLine(sta);
}
}
public void main()
{
Person zhang = new Person();
Person li = new Person();
//const在赋值后仅能通过类调用,而无法通过实例去调用。
Console.WriteLine(zhang.con). //error
Console.WriteLine(Person.con). //"123"
//const无法在运行时进行修改
Person.con = "134"; //error
//readonly在赋值后仅能通过实例去调用,而无法通过类调用
Console.WriteLine(t1.red); //"red"
Console.WriteLine(Person.red); //error
//readonly无法在运行时进行修改
Person.red = "person"; //error
Person.sta = "1231";
//实例无法直接对static的属性进行修改,但是可以通过类的方法对其修改
zhang.sta="zhang"; //error
zhang.ChangeSta("zhang"); //"zhang"
li.ChangeSta("li"); //"li"
Console.WriteLine(Person.sta); //"li"
}