在C#中可以使用readonly关键词来定义一个只读字段。
只读字段主要有以下几个要点:
- 只读字段可以在定义的同时赋值或者在类的构造方法中给其赋值;
 - 除了构造方法外,其他地方不可以修改只读字段的值;
 - 只读字段的属性只能有get访问器,不能有set,这是显而易见的。
 
只读字段与常量的区别:
常量(使用const关键字定义)只能在声明的同时初始化(赋值)。
readonly 字段可以在声明或构造函数中初始化。 因此,根据所使用的构造函数,readonly 字段可能具有不同的值。
只读字段使用举例:
class Student
{
    readonly string studentId;
    string studentName;
    public Student(string sId)    //在构造函数中初始化只读字段
    {
        this.studentId = sId;
    }
    public Student(string sId, string sName)   //另外一个构造函数
    {
        studentId = sId; studentName = sName;
    }
    public void PrintInfo()   //普通方法
    {
        Console.WriteLine("学号:{0}", sId);
        Console.WriteLine("姓名:{0}", sName);
    }
    public string StudentId    //属性
    {
        get{ return this.sId;}
        set{ sId = value;}  //错误,只读字段不能有set
    }
}
                    