標籤:style blog http color strong os
const和readonly經常被用來修飾類的欄位,兩者有何異同呢?
const
1、聲明const類型變數一定要賦初值嗎?
--一定要賦初值
public class Student { public const int age; }
產生的時候,會報如下錯:
正確的應該這樣寫:
public class Student { public const int age = 18; }
2、聲明const類型變數可以用static修飾嗎?
--不可以
public class Student { public static const int age = 18; }
產生的時候,會報如下錯:
正確的應該這樣寫:
public class Student { public const int age = 18; }
因為const預設是static。
3、運行時變數可以賦值給const類型變數嗎?
--不可以
public class Student { public const int age = 18; public Student(int a) { age = a + 1; } }
產生的時候,會報如下錯:
const類型變數是編譯期變數,無法把運行時變數賦值給編譯期變數。
4、const可以修飾參考型別變數嗎?
--可以,但只能給參考型別變數賦null值。
public class Student { public const Teacher teacher = new Teacher(); } public class Teacher { }
產生的時候,會報如下錯:
正確的應該這樣寫:
public class Student { public const Teacher teacher = null; } public class Teacher { }
readonly
5、聲明readonly類型變數一定要賦初值嗎?
--不一定,既可以賦初值,也可以不賦初值。
以下不賦初值的寫法正確:
public class Student { public readonly int age; }
以下賦初值的寫法也對:
public class Student { public readonly int age = 18; }
6、運行時變數可以賦值給readonly類型變數嗎?
--可以
以下在建構函式中給readonly類型變數賦值是可以的:
public class Student { public readonly int age = 18; public Student(int a) { age = a; } }
7、聲明readonly類型變數可以用static修飾嗎?
--可以的
以下寫法正確:
public class Student { public static readonly int age = 18; }
總結
const修飾符:
● 用const修飾的變數是編譯期變數
● 不能把運行時變數賦值給const修飾的變數
● const修飾的變數在聲明時要賦初值
● const修飾的變數不能在前面加static修飾
● cosnt也可以修飾參考型別變數,但一定要給參考型別變數賦null初值
readonly修飾符:
● 用readonly修飾的變數是運行時變數
● 可以把運行時變數賦值給readonly修飾的變數
● readonly修飾的變數在聲明時,既可以賦初值,也可以不賦初值
● readonly修飾的變數可以在前面加static修飾符