程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

readonly

編輯:.NET實例教程

Readonly

Readonly可修飾字段,表示此字段只能在定義處或構造器修改值,

來看DEMO

class Test

    {

        public readonly int i = 3;

        public Test()

        {

            i = 4;

        }

       

        public void OtherMethod()

        {

            //i = 5;//error messages->錯誤     1    無法對只讀的字段賦值(構造函數或變量初始值指定項中除外)

 

        }

    }

二,需要注意的是,可以采用反射(reflection)來修改readonly字段,當某個字段是引用類型,並且該字段標記為readonly時,它就是不可改變的引用,而不是字段所引用的對象。以下代碼對此進行了演示:

class Test2

    {

        public static readonly Char[] InvalidChars = new Char[] { ''A'', ''B'', ''C'' };

 

        //public static readonly string[] InvalidStrings = new string[] { "A", "B", "C" };

       

        public static readonly int b = 1;

 

        static Test2()

        {

           

            b = 2;

        }

 

        public int getIntValue()

        {            return b;

 

        }

}

 

 

 

class Program

{

 

        static void Main(string[] args)

        {

            //下面三行代碼是合法的,可以通過編譯,並可以成功修改InvalidChars數組

 

            //中的字符

 

            Test2.InvalidChars[0] = ''X'';

 

            //Test2.InvalidStrings[0] = "wmj";//string[]類型

 

            //此方式,沒有在構造函數中修改

            //Test2.b = 3;//error message->錯誤    1    無法對靜態只讀字段賦值(靜態構造函數或變量初始值設定項中除外)

 

            //此方式,通過構造函數(static的)修改

            Test2 t2 = new Test2();

            Console.WriteLine(t2.getIntValue());

            Console.ReadLine();

 

 

            //下一行代碼是非法的,無法通過編譯,因為InvalidChars的引用無法更改

 

            //Test2.InvalidChars = new Char[] { ''X'', ''Y'', ''Z'' };//error message->錯誤    1    無法對靜態只讀字段賦值(靜態構造函數或變量初始值設定項中除外)       

 }

}

按F5,輸出結果為2,OK。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved