一周學會
c#(屬性一)
1.問題
struct time
public void sethour(int value)
...
private int hour, minute, second;
}
static void
main
()
封裝把一些不重要的細節隱藏起來,這樣你可以集中精力處理那些重要的內容。但封裝很難被掌握,乙個典型的封裝誤用是盲目地把公有字段轉為私有字段。例如在上面的例子中,程式定義了乙個私有欄位hour和sethour函式和gethour函式,而不是定義乙個公有的hour欄位。如果gethour函式只是返回私有欄位的值而sethour函式只是設定私有欄位的值的話,那麼你除了使time類更難使用外,你不會得到任何好處。
2.不是解決的辦法
·如果欄位是公有的,那使用起來是簡單的
w但如果你使用公有字段的話,你會失去控制權
w要簡化而不是簡單
struct time
static void
main
()
上面的例子使用公有欄位來使字段的使用比較簡單。例如,你不用寫:
lunch.sethour(lunch.gethour() + 1);
而只要寫:
++lunch.hour;
但是,這種簡單的表示式是有代價的。考慮上面的例子,程式給hour和minute欄位分別賦值為30和12。問題是30不在hour的範圍(0-23)內。但如果欄位是公有的話,你就沒有辦法捕獲這個錯誤。
所以雖然get和set函式比較麻煩,但它們在這方面比公有字段具有優勢是很明顯的。get和set函式允許程式設計師控制類的內在欄位的讀和寫。這是非常有用的,例如你可以檢查set函式的引數範圍。
當然最理想的方法是保留公有字段提供的簡單而直接的表示式和get和set函式提供的控制權。(呵呵,人總是既想偷懶又想得到很多)
3.解決的辦法
·屬性
w自動使用get
識別符號進行讀
w自動使用set識別符號進行寫
struct time
set
}
private int hour, minute, second;
}
time lunch = new time();
...
lunch.hour = 12;
...
console.writeline(lunch.hour);
c#提供了乙個解決上述問題的好辦法。你可以把get和set函式組合成乙個簡單的屬性。屬性的宣告包括乙個可選的訪問修飾符(在例子中是public)、返回值(int)、屬性的名字(hour)和乙個包含get和set語句的屬性體。特別要注意的是屬性沒有括號,因為屬性不是函式。屬性的命名規則應符合一般的命名規則,即公有的使用pascalcase規則,而非公有的使用camelcase規則。在上面的例子中,hour屬性是公有的,所以命名為hour而不是hour。
例子中演示了屬性的用法。屬性使用的語法和字段的一樣,沒有括號。如果你要寫乙個屬性,那你可以這樣寫:
lunch.hour = 12;
屬性的set語句自動被執行。
如果你要讀乙個屬性,你可以這樣寫:
int hour = lunch.hour;
屬性的get語句自動被執行。
4.get語句
lget
語句
ø必須返回乙個有確定型別的值
ø功能上就像乙個「get函式」
struct time
...
}
private int hour, minute, second;
}
time lunch = new time();
... console.writeline(lunch.hour);
//請注意,get和set不是關鍵字
當讀乙個屬性的時候,屬性的get語句自動執行。
get語句必須返回乙個有確定型別的值。在上面的例子中,time結構類有乙個整型屬性hour,所以它的get語句必須返回乙個整型值。
屬性的返回值不能是void(從這裡可以推斷出欄位的型別也不能是void)。這就意味著get語句必須包含乙個完整的return語句(retun;這種形式是錯誤的)。
get語句可以在retun語句前包含任何其他的語句(比如,可以檢查變數的型別),但return語句不能省略。
注意,get和set不是關鍵字,所以你可以在任何地方包括get/set語句中宣告乙個區域性變數、常量的名字是get或set,但最好不要這樣做。
一周學會C (列舉一)
一周學會 c 列舉一 1.型別 值型別 w變數直接包含它們自己的資料 w區域性變數總是放在棧 stack 中 引用型別 w變數間接指向它們的資料 w區域性變數指向堆 heap 中的物件 列舉 enum 值型別 結構 struct 值型別 類 class 引用型別 介面 inte ce 引用型別 陣列...
一周學會C (類二)
一周學會 c 類二 5.例項字段 例項字段.w在所有的建構函式中被初始化為預設值 0 false null w可以在一建構函式中顯式初始化 w可以在它們宣告時初始化 sealed class pair private int x private int y 42 回憶一下 在結構的自定義建構函式必須...
一周學會C (值的型別二)
一周學會 c 值的型別二 4.連線 規則1 w除了賦值操作符外的其他二元操作符都是左連線的。x y z 應理解為 x y z 規則2 w賦值操作符和?操作符是右連線的。x y z 應理解為x y z x y z 應理解為x y z a?b c?d e 應理解為a?b c?d e 5.計算時的順序 運...