前言
這篇文章主要介紹存取子讀(get)和寫(set)的概述,並且簡單介紹基本的使用方法,所以不會使用過多的程式和範例來做說明,希望以易懂白話的方式傳達這個很常看到但不易理解的概念。
前篇文章提到擔心文章撰寫之前學的知識會和新學的知識衝突,進而學新知識和撰寫就舊學知識文章導致工作量大增,時間證明我想多了,人總有雜物跟其他事情,翻著筆記本,我在尋找值得撰寫的文章。
屬性:讀(get)、寫(set)
讀跟寫不好懂,我想一部分原因來自於新手不常用,它不像其他程式跟修飾詞屬於「總會用到」的類型,而是屬於「也可以這麼用」的類型,不過理解後也還好。
屬性(Properties)
首先要介紹屬性,在微軟C#官方定義為:
「屬性會合併欄位和方法的各個層面。 對物件的使用者而言,屬性會呈現為欄位,而存取屬性需要相同的語法。 對於類別的實作器而言,屬性是一或兩個程式碼區塊,代表 get 存取子和 (或) set 存取子。
因為在這一段敘述中,你需要理解欄位(fields)、方法(method)、類別(class)、實作器(implementer)、程式碼區塊(code blocks)、存取子(accessor)
當屬性來到現實世界
如果要求學習每程式都需要理解每一個單字的內容,那學習程式會變得相當痛苦,但有些人就是想要從定義下手,譬如我,學這些基本屬性讓我作了不少筆記,也花了不少時間,我現在用我的理解解釋給你看。
所謂屬性(properties),就是一種「限制器」、「中繼站」,就像「保險絲」一樣的作用,假設有有一個人類被創造了,而耶穌跟佛祖都想設定你的基本參數,像體重、智商等等,耶穌在設定智商時,多了一個零變成1100IQ,而屬性(properties)這個「保險絲」,就會幫你轉變成200IQ(人類理論最大值)或是乾脆斷電(連值都沒有)。
在智商的變數上面,分為「耶穌設定的智商」和「你的智商」兩個不同的數字,於是「保險絲」就運作了,寫(set)負責更改「耶穌設定的智商」然後存進「保險絲儲存的智商」、寫(set)負責把「保險絲儲存的智商」轉移給「你的智商」
程式中的屬性
為了確保所有人聽懂,保險絲是確保電線不會燒起來,本身也是電線的一種,只是比較容易燒起來,會提前把自己燒斷,在程式中宣告的就是變數。
//變數(variable)
private int a;
//屬性(properties)
private int a{ ... }
屬性通常針對外來參數,也就是其他程式的參數,所以常用公開存取修飾詞
//變數(variable)
private int a;
//屬性(properties)
public int A{ ... }
如果不知道為什麼要大寫,請參考
讀(get)
讀(get)存取子(accessor)決定屬性(properties)
回傳(return)變數(variable)給誰。
//完整寫法
private int a;
public int A;
{
get
{
return a;
}
}
//properties使用Lambda方式撰寫
public int A;
{
get =>a;
}
寫(set)
寫(set)存取子(accessor)決定屬性(properties)
改寫「此屬性被修改後的原始值」
//套用讀的範例
private int a;
public int A;
{
get =>a;
set
{
if(A>10)
{
A=10;
}
}
}
其他程式呼叫的結果
//假設讀寫範例的類別(class)名稱為AA
//假設這兩個程式位於同個物件
public AA AA;
AA = getComponent<AA>();
AA.a=1 (無法使用)
AA.a=99(無法使用)
AA.A=1 (AA中的a=1)
AA.A=99(AA中的a=10)
名詞介紹
唯獨(readonly)(唯讀屬性)
沒有讀(set)存取子(accessor)會視為唯獨。
沒有 set 存取子的屬性會視為唯讀。 沒有 get 存取子的屬性則視為唯寫。 具有這兩個存取子的屬性是讀寫。
唯寫(readwrite)(唯寫屬性)
沒有讀(get)存取子(accessor)會視為唯寫。
讀寫(屬性)
讀(get)、寫(set)存取子(accessor)均存在
結尾
本文章參考微軟C#,連結放置最下方,有興趣看官方更詳細的範例可以點及參考,這篇主要是概述和解釋,不過詳細的講解。
寫這篇文章意外的花了我想當久的時間,要找資料查原文,切換微軟C#不同的語言模式,寫了將近兩個小時,不得不說藉由撰寫解釋,我對讀寫瞭解更加詳細了。