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修飾符
新聞熱點
疑難解答