以前一直以为readonly是一个运行时常量,可以在声明时初始化,也可以在构造函数中初始化,但是一旦初始化完成后便无法改变。但是最近遇到下面的一个事例却可以编译通过,而且通过测试还可以发现DocumentManager下的readonly变量documentQueue 可以通过DocumentManager的方法改变它。这和我理解的只读属性不符,我理解的应该是,既然documentQueue为只读变量,应该不可以被所在类的方法改变。可通过测试可以发现下面的代码确实可行。
public class Document
    {
        private string title;
        public string Title
        {
            get
            {
                return title;
            }
        }
        private string content;
        public string Content
        {
            get
            {
                return content;
            }
        }
        public Document(string title, string content)
        {
            this.title = title;
            this.content = content;
        }        public override string ToString()
        {
            return title.ToString() + content.ToString();
        }
    } public class DocumentManager
    {
        private readonly Queue<Document> documentQueue = new
        Queue<Document>();
        public void AddDocument(Document doc)
        {
            lock (this)
            {
                documentQueue.Enqueue(doc);
            }
        }
        public Document GetDocument()
        {
            Document doc = null;
            lock (this)
            {
                doc = documentQueue.Dequeue();
            }
            return doc;
        }
        public bool IsDocumentAvailable
        {
            get
            {
                return documentQueue.Count > 0;
            }
        }
    }测试代码:将以下代码copy到Main()函数中可以测试上面的代码。           Document testdocument = new Document("for test readonly", "test readonly");            DocumentManager testManger = new DocumentManager();
            testManger.AddDocument(testdocument);
            Console.WriteLine(testManger.GetDocument().ToString());
            Console.ReadLine();