C 中字段和屬性的使用時機

2022-08-26 18:06:21 字數 1856 閱讀 6907

在c#中,我們可以非常自由的、毫無限制的訪問公有字段,但在一些場合中,我們可能希望限制只能給字段賦於某個範圍的值、或是要求字段只能讀或只能寫,或是在改變欄位時能改變物件的其他一些狀態,這些單靠欄位是無法做到的,於是就有了屬性,屬性中包含兩個塊:set和get,set塊負責屬性的寫入工作,get塊負責屬性的讀取工作。在兩個塊中都可以做一些其他操作,如在set中驗證賦的值是否符合要求並決定是否進行賦值。當缺少其中一塊時屬性就只能讀或只能寫,set和get塊中屬性必需有乙個,因為即不能讀又不能寫的屬性是沒有意義的。

1

class

myclass313

set 15}

17 }

(1)屬性可以保證安全,當不在本類中使用時可以保證使用屬性名可以避免

用字段的名字。

(2)屬性的set和get函式可以限制欄位的一些功能,以達到某種目的。

如:

private

int a=0;

public

inta

set}

(3)屬性沒有儲存資料的功能,資料都存在欄位中,所以只有修改欄位的資料才能更改資料,修改屬性的值沒用。

總結:1. 字段用來儲存資料的,設定private,protected, public可以控制訪問範圍,只能單純讀取值, 不能做賦值的驗證條件, 不能設定讀寫控制, 不能間接改變其他值

2. 屬性在il中可以看出就是乙個方法, 資料儲存還是在字段中, 通過set, get 可以做欄位不能做的上述很多操作

3. 用字段來儲存資料, 設定到讀寫控制的時候就用屬性,但是又會覺得每次都寫乙個欄位加乙個屬性太麻煩,就可以用下面的書寫方式,既簡介又可以一眼看出是屬性

1

public

class

genre24

}5//編譯器會編譯成以下方式

6public

class

genre717

set1821}

22 }

1

class

myclass313

set 15}

17 }

(1)屬性可以保證安全,當不在本類中使用時可以保證使用屬性名可以避免

用字段的名字。

(2)屬性的set和get函式可以限制欄位的一些功能,以達到某種目的。

如:

private

int a=0;

public

inta

set}

(3)屬性沒有儲存資料的功能,資料都存在欄位中,所以只有修改欄位的資料才能更改資料,修改屬性的值沒用。

總結:1. 字段用來儲存資料的,設定private,protected, public可以控制訪問範圍,只能單純讀取值, 不能做賦值的驗證條件, 不能設定讀寫控制, 不能間接改變其他值

2. 屬性在il中可以看出就是乙個方法, 資料儲存還是在字段中, 通過set, get 可以做欄位不能做的上述很多操作

3. 用字段來儲存資料, 設定到讀寫控制的時候就用屬性,但是又會覺得每次都寫乙個欄位加乙個屬性太麻煩,就可以用下面的書寫方式,既簡介又可以一眼看出是屬性

1

public

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...