readonly 與 const
readonly是運行時常量,const是編譯期常量(在編譯過程中已經把使用該值的都用值替代,不分配內存)readonly靈活性高,const效率高
readonly 可以修飾任何類型的常量,包括自定義類,const則只能修飾基元類型,枚舉類型及字符串(const MyClass myClass 則錯誤寫法)
用const修飾的則不能加static 修飾,編譯期本來就是靜態常量
readonly 可以在構造函數內對其多次賦值
public class Mouse
{
public readonly int ReadOnlyValue = 100;
public Mouse(int readonlyvalue)
{
ReadOnlyValue = readonlyvalue;//是正確的寫法,可以多次賦值
}
}
Mouse mouse = new Mouse(300);//正確
mouse.ReadOnlyValue = 400;//錯誤
public class Mouse
{
public readonly Cat ReadOnlyValue = new Cat() { catValue = 100 };
public Mouse(Cat cat)
{
ReadOnlyValue = cat;
}
}
readonly對引用類型修飾的話,是不能再指向其他的實例,但可以對指向的引用實例值時可以改變的
Mouse mouse = new Mouse(new Cat() { catValue = 300 });
mouse.ReadOnlyValue.catValue = 400;//正確
mouse.ReadOnlyValue = new Cat() { catValue = 500 };//錯誤
Cat cat = new Cat() { catValue = 500 };
mouse.ReadOnlyValue.catValue = cat.catValue;//正確
新聞熱點
疑難解答