在c#中,我們可以非常自由的、毫無限制的訪問公有字段,但在一些場合中,我們可能希望限制只能給字段賦於某個範圍的值、或是要求字段只能讀或只能寫,或是在改變欄位時能改變物件的其他一些狀態,這些單靠欄位是無法做到的,於是就有了屬性,屬性中包含兩個塊:set和get,set塊負責屬性的寫入工作,get塊負責屬性的讀取工作。在兩個塊中都可以做一些其他操作,如在set中驗證賦的值是否符合要求並決定是否進行賦值。當缺少其中一塊時屬性就只能讀或只能寫,set和get塊中屬性必需有乙個,因為即不能讀又不能寫的屬性是沒有意義的。
1class
myclass313
set 15}
17 }
(1)屬性可以保證安全,當不在本類中使用時可以保證使用屬性名可以避免
用字段的名字。
(2)屬性的set和get函式可以限制欄位的一些功能,以達到某種目的。
如:
privateint a=0;
public
inta
set}
(3)屬性沒有儲存資料的功能,資料都存在欄位中,所以只有修改欄位的資料才能更改資料,修改屬性的值沒用。
總結:1. 字段用來儲存資料的,設定private,protected, public可以控制訪問範圍,只能單純讀取值, 不能做賦值的驗證條件, 不能設定讀寫控制, 不能間接改變其他值
2. 屬性在il中可以看出就是乙個方法, 資料儲存還是在字段中, 通過set, get 可以做欄位不能做的上述很多操作
3. 用字段來儲存資料, 設定到讀寫控制的時候就用屬性,但是又會覺得每次都寫乙個欄位加乙個屬性太麻煩,就可以用下面的書寫方式,既簡介又可以一眼看出是屬性
1public
class
genre24
}5//編譯器會編譯成以下方式
6public
class
genre717
set1821}
22 }
1class
myclass313
set 15}
17 }
(1)屬性可以保證安全,當不在本類中使用時可以保證使用屬性名可以避免
用字段的名字。
(2)屬性的set和get函式可以限制欄位的一些功能,以達到某種目的。
如:
privateint a=0;
public
inta
set}
(3)屬性沒有儲存資料的功能,資料都存在欄位中,所以只有修改欄位的資料才能更改資料,修改屬性的值沒用。
總結:1. 字段用來儲存資料的,設定private,protected, public可以控制訪問範圍,只能單純讀取值, 不能做賦值的驗證條件, 不能設定讀寫控制, 不能間接改變其他值
2. 屬性在il中可以看出就是乙個方法, 資料儲存還是在字段中, 通過set, get 可以做欄位不能做的上述很多操作
3. 用字段來儲存資料, 設定到讀寫控制的時候就用屬性,但是又會覺得每次都寫乙個欄位加乙個屬性太麻煩,就可以用下面的書寫方式,既簡介又可以一眼看出是屬性
1public
class
genre24
}5//編譯器會編譯成以下方式
6public
class
genre717
set1821}
22 }
類屬性的self 的使用時機和不使用時的區別
最近有人問我關於什麼時候用self.賦值的問題,我總結了一下,發出來給大家參考.有什麼問題請大家斧正.關於什麼時間用self.其實是和obj c的訪問方法有關,不過網上很多人也都這麼解答的,那它為什麼和訪問方法有關?怎麼有關的?並沒有多少人回答出來.同時關於記憶體管理的內容,請大家看旺財勇士的obj...
Block 的使用時機
block 一般是用來表示 簡化一小段的程式碼,它特別適合用來建立一些同步執行的程式片段 封裝一些小型的工作或是用來做為某乙個工作完成時的回傳呼叫 callback 在新的ios api中block被大量用來取代傳統的delegate和callback,而新的api會大量使用block主要是基於以下...
C 中拷貝函式的呼叫時機
1.用已經建立好的物件來初始化新的物件 2.值傳遞的方式給函式引數傳值 3.以值方式返回區域性物件 define crt secure no warnings includeusing namespace std class person person int a person const pers...