C#賦值運(yùn)算符之簡單賦值運(yùn)算符
C#賦值運(yùn)算符之簡單賦值運(yùn)算符的概念:
= 運(yùn)算符稱為簡單賦值運(yùn)算符。在簡單賦值中,右操作數(shù)表達(dá)式所屬的類型必須可隱式地轉(zhuǎn)換為左操作數(shù)所屬的類型。運(yùn)算將右操作數(shù)的值賦予左操作數(shù)指定的變量、屬性或索引器元素。
簡單賦值表達(dá)式的結(jié)果是賦予左操作數(shù)的值。結(jié)果的類型與左操作數(shù)相同,且始終為值類別。
如果左操作數(shù)為屬性或索引器訪問,則該屬性或索引器必須具有 set 訪問器。如果不是這樣,則發(fā)生編譯時錯誤。
x = y 形式的簡單賦值的運(yùn)行時處理包括以下步驟:
如果 x 屬于變量:
計算 x 以產(chǎn)生變量。
如果要求,則計算 y,必要時還需通過隱式轉(zhuǎn)換將其轉(zhuǎn)換為 x 的類型。
如果 x 給定的變量是引用類型的數(shù)組元素,則執(zhí)行運(yùn)行時檢查以確保為 y 計算的值與以 x 為其元素的那個數(shù)組實例兼容。如果 y 為 null,或存在從 y 引用的實例的實際類型到包含 x 的數(shù)組實例的實際元素類型的隱式引用轉(zhuǎn)換,則檢查成功。否則,引發(fā) System.ArrayTypeMismatchException。
y 的計算和轉(zhuǎn)換后所產(chǎn)生的值存儲在 x 的計算所確定的位置中。
如果 x 屬于屬性或索引器訪問:
計算與 x 關(guān)聯(lián)的實例表達(dá)式(如果 x 不是 static)和參數(shù)列表(如果 x 是索引器訪問),結(jié)果用于后面的對 set 訪問器調(diào)用。
計算 y,必要時還需通過隱式轉(zhuǎn)換將其轉(zhuǎn)換為 x 的類型。
調(diào)用 x 的 set 訪問器,并將 y 的上述結(jié)果值作為該訪問器的 value 參數(shù)。
C#賦值運(yùn)算符之簡單賦值運(yùn)算符的使用:
如果存在從 B 到 A 的隱式引用轉(zhuǎn)換,則數(shù)組協(xié)方差規(guī)則允許數(shù)組類型 A[] 的值成為對數(shù)組類型 B[] 的實例的引用。由于這些規(guī)則,對引用類型的數(shù)組元素的賦值需要運(yùn)行時檢查以確保所賦的值與數(shù)組實例兼容。在下面的示例中,
- string[] sa = new string[10];
- object[] oa = sa;
- oa[0] = null; // Ok
- oa[1] = "Hello"; // Ok
- oa[2] = new ArrayList(); // ArrayTypeMismatchException
最后的賦值導(dǎo)致引發(fā) System.ArrayTypeMismatchException,這是因為 ArrayList 的實例不能存儲在 string[] 的元素中。
當(dāng)“結(jié)構(gòu)類型”中聲明的屬性或索引器是賦值的目標(biāo)時,與屬性或索引器訪問關(guān)聯(lián)的實例表達(dá)式必須為變量類別。如果該實例表達(dá)式歸類為值類別,則發(fā)生編譯時錯誤。
給定下列聲明:
- struct Point
- {
- int x, y;
- public Point(int x, int y) {
- this.x = x;
- this.y = y;
- }
- public int X {
- get { return x; }
- set { x = value; }
- }
- public int Y {
- get { return y; }
- set { y = value; }
- }
- }
- struct Rectangle
- {
- Point a, b;
- public Rectangle(Point a, Point b) {
- this.a = a;
- this.b = b;
- }
- public Point A {
- get { return a; }
- set { a = value; }
- }
- public Point B {
- get { return b; }
- set { b = value; }
- }
- }
在下面的示例中,
- Point p = new Point();
- p.X = 100;
- p.Y = 100;
- Rectangle r = new Rectangle();
- r.A = new Point(10, 10);
- r.B = p;
由于 p 和 r 為變量,因此允許對 p.X、p.Y、r.A 和 r.B 賦值。但是,在以下示例中
- Rectangle r = new Rectangle();
- r.A.X = 10;
- r.A.Y = 10;
- r.B.X = 100;
- r.B.Y = 100;
由于 r.A 和 r.B 不是變量,所以賦值全部無效。
C#賦值運(yùn)算符之簡單賦值運(yùn)算符的基本情況就向你介紹到這里,希望對你學(xué)習(xí)C#賦值運(yùn)算符之簡單賦值運(yùn)算符有所幫助。
【編輯推薦】