淺析C# get和set用法
C# get set用法很簡單的,但是必須要很好掌握基礎(chǔ)的認(rèn)識,才能更好的理解C# get set用法。
C# get set用法中,get是讀取屬性時(shí)進(jìn)行的操作,set是設(shè)置屬性時(shí)進(jìn)行的操作。定義一個(gè)屬性如果只有g(shù)et,這個(gè)屬性就是只讀的。同樣,只有set,屬性就是只寫的,當(dāng)然只寫的屬性是沒有任務(wù)意義的。
假設(shè)類是一個(gè)銀行,既能存錢也能取錢.
- private m_money;
- private class bank()
- {
- get
- {
- return m_money;
- }
- set
- {
- m_money=value
- }
- }
money就像銀行里的自動(dòng)存取款機(jī),你看不見里面的money,但你能用set(存錢),用get(取錢)。m_money是一個(gè)私有字段,是分裝在類中的,類以外的程序不能直接訪問的,C# get set用法中,類的set和get成員是外部程序訪問類內(nèi)部屬性的唯一方法,就像你去銀行取錢,你不能直接從銀行的保險(xiǎn)柜里拿到錢,而是銀行營業(yè)人員把錢取出來給你的。
屬性在調(diào)用者看來就像一個(gè)普通的變量,普通變量怎么用,它就怎么用,但作為類的設(shè)計(jì)者,你可以利用屬性來隱藏你類中的一些字段,使外界只能通過屬性來訪問你的字段,你可以通過屬性來限制外界對你的字段的存取,就利用get,set,如果你想讓用戶隨意存取你的字段,那么就實(shí)現(xiàn)set和get,如果只想讓用戶讀取字段,就只實(shí)現(xiàn)get,若只想讓用戶寫字段就只實(shí)現(xiàn)set,同時(shí)你還可以在set和get中對用戶傳遞來的值進(jìn)行一些驗(yàn)證工作,以確保你的字段將含有正確的值。
C# get set用法比如
- private int a;
- public int Index
- {
- get
- {
- return a;
- }
- set
- {
- if (value>0)
- a=value;
- else
- a=0;
- }
- }
可以看出,C# get set用法中有一種函數(shù)的特征。
C# get set用法中一則是隱藏組件或類內(nèi)部的真實(shí)成員,
二是用來建立約束的,比如,實(shí)現(xiàn)“有我沒你”這種約束。
三是用來響應(yīng)屬性變化事件,當(dāng)屬性變化時(shí)做某事,只要寫在SET 方法里就行了。
有兩種途徑揭示類的命名屬性——通過域成員或者通過屬性。前者是作為具有公共訪問性的成員變量而被實(shí)現(xiàn)的;后者并不直接回應(yīng)存儲(chǔ)位置,只是通過 存取標(biāo)志(accessors)被訪問。
當(dāng)你想讀出或?qū)懭雽傩缘闹禃r(shí),存取標(biāo)志限定了被實(shí)現(xiàn)的語句。用于讀出屬性的值的存取標(biāo)志記為關(guān)鍵字get,而要修改屬性的值的讀寫符標(biāo)志記為set。
- using System;
- public class House
- {
- private int m_nSqFeet;
- public int SquareFeet
- {
- get
- { return m_nSqFeet; }
- set
- { m_nSqFeet = value; }
- }
- }
- class TestApp
- {
- public static void Main()
- {
- House myHouse = new House();
- myHouse.SquareFeet = 250;
- Console.WriteLine(myHouse.SquareFeet);
- }
- }
House類有一個(gè)命名為SquareFeet的屬性,它可以被讀和寫。實(shí)際的值存儲(chǔ)在一個(gè)可以從類內(nèi)部訪問的變量中——如果你想當(dāng)作一個(gè)域成員重寫它,你所要做的就是忽略存取標(biāo)志而把變量重新定義為:
- public int SquareFeet;
對于一個(gè)如此簡單的變量,這樣不錯(cuò)。但是,如果你想要隱藏類內(nèi)部存儲(chǔ)結(jié)構(gòu)的細(xì)節(jié)時(shí),就應(yīng)該采用存取標(biāo)志。在這種情況下,set 存取標(biāo)志給值參數(shù)中的屬性傳遞新值。(可以改名,見第10行。)
除了能夠隱藏實(shí)現(xiàn)細(xì)節(jié)外,你還可自由地限定各種操作:
get和set:允許對屬性進(jìn)行讀寫訪問。
get only:只允許讀屬性的值。
set only:只允許寫屬性的值。
除此之外,你可以獲得實(shí)現(xiàn)在set標(biāo)志中有效代碼的機(jī)會(huì)。例如,由于種種原因(或根本沒有原因),你就能夠拒絕一個(gè)新值。***是沒有人告訴你它是一個(gè)動(dòng)態(tài)屬性——當(dāng)你***次請求它后,它會(huì)保存下來,故要盡可能地推遲資源分配。
以上就是對C# get set用法的簡單介紹。
【編輯推薦】