一周學會C (屬性一)

2021-04-17 00:53:35 字數 2922 閱讀 1059

一周學會

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);

//請注意,getset不是關鍵字

當讀乙個屬性的時候,屬性的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.計算時的順序 運...