一、readonly屬性的概述
1、readonly是C#中修飾符的一種,它可以用來修飾變數和欄位。
2、將變數或欄位聲明為readonly,表示它們只能被賦值一次,之後就不允許再次修改。
3、readonly的作用是保證在程序運行期間,修飾的變數或欄位不會被修改,因此提高了程序的安全性、穩定性和可靠性。
二、readonly與const的區別
1、const是在編譯時常量,而readonly是在運行時常量。
2、const的值必須在定義時就指定,而readonly可以在構造函數中指定。
3、const只能修飾基本類型和字元串類型,而readonly可以修飾任何類型。
4、const是靜態綁定,而readonly是動態綁定。
三、readonly與static的配合使用
1、在static類中,只能使用readonly,不能使用const。
2、在靜態構造函數中(static constructor),可以為readonly欄位指定初始化值。
3、在實例構造函數中,無法為readonly欄位指定初始化值。
public class MyStaticClass
{
public static readonly int MyReadonlyField;
static MyStaticClass()
{
MyReadonlyField = 42;
}
}
四、readonly類的使用
1、使用readonly修飾符定義的類,只能在聲明和構造函數中被初始化。
2、readonly類的成員(包括欄位和屬性)必須在構造函數中被初始化。
3、類中所有非靜態欄位都必須是readonly。
public readonly class MyReadonlyClass
{
private readonly int _x;
private readonly int _y;
public MyReadonlyClass(int x, int y)
{
_x = x;
_y = y;
}
public int X
{
get { return _x; }
}
public int Y
{
get { return _y; }
}
}
五、readonly結構體的使用
1、使用readonly修飾符定義的結構體,只能在聲明和構造函數中被初始化。
2、readonly結構體的成員(包括欄位和屬性)必須在構造函數中被初始化。
3、結構體中所有非靜態欄位都必須是readonly。
public readonly struct MyReadonlyStruct
{
public readonly int X;
public readonly int Y;
public MyReadonlyStruct(int x, int y)
{
X = x;
Y = y;
}
}
六、readonly引用類型的使用
1、使用readonly修飾符定義的引用類型,不能在構造函數中修改其引用地址,但是可以在引用對象內部修改其狀態。
2、readonly引用類型的成員必須在構造函數中被初始化。
public readonly class MyReferenceType
{
private readonly int[] _array;
public MyReferenceType(int[] array)
{
_array = array;
}
public int[] Array
{
get { return _array; }
}
}
七、readonly與線程安全
1、readonly可以用來保證線程安全,因為它能夠保證在多線程環境下數據不被修改。
2、在多線程環境中,為了保證線程安全,需要使用鎖或者其他同步機制,而readonly能夠降低同步的開銷和複雜度。
3、readonly還可以用來保證對象的不可變性(Immutable),從而更好地支持函數式編程。
八、總結
1、readonly是一種保證程序安全性、穩定性和可靠性的修飾符。
2、readonly與const的區別在於,readonly是在運行時常量,而const是在編譯時常量。
3、readonly與static、類、結構體、引用類型的使用方式各不相同。
4、readonly可以用來保證線程安全和對象的不可變性。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/232315.html
微信掃一掃
支付寶掃一掃