C# 屬性和字段
可以通過屬性和字段訪問對(duì)象中包含的數(shù)據(jù)。這些對(duì)象數(shù)據(jù)可以用于區(qū)分不同的對(duì)象,因?yàn)橥粋€(gè)類的不同對(duì)象在屬性和字段中存儲(chǔ)了不同的值。
包含在對(duì)象中的不同數(shù)據(jù)構(gòu)成了對(duì)象的狀態(tài)。假定一個(gè)對(duì)象類表示一杯咖啡,稱為CupOfCoffee。在實(shí)例化這個(gè)類(即創(chuàng)建這個(gè)類的對(duì)象)時(shí),必須提供對(duì)類有意義的狀態(tài)。此時(shí)可以使用屬性和字段,讓代碼能通過該對(duì)象設(shè)置要使用的咖啡品牌,咖啡中是否加牛奶或方糖,咖啡是否即溶等。于是,給定的這杯咖啡對(duì)象就有了指定的狀態(tài),例如,加牛奶和兩塊方糖的哥倫比亞過濾咖啡。
字段和屬性都可以鍵入,所以可將信息存儲(chǔ)在字段和屬性中,作為string值、int值等。但屬性與字段是不同的,因?yàn)閷傩圆惶峁?duì)數(shù)據(jù)的直接訪問。對(duì)象能讓用戶不考慮數(shù)據(jù)的細(xì)節(jié),不需要在屬性中用一對(duì)一的方式表示。如果在CupOfCoffee實(shí)例中使用一個(gè)字段來表示方糖的數(shù)量,用戶就可以在該字段中放置自己喜歡的值,其取值范圍僅由存儲(chǔ)該信息的類型來限制。例如,如果使用int來存儲(chǔ)這個(gè)數(shù)據(jù),用戶就可以使用-2 147 483 648至2 147 483 647之間的任意值,如第3章所述。顯然,并不是所有的值都有意義,尤其是負(fù)值,一些較大的正值將需要非常大的咖啡杯。但如果使用一個(gè)屬性來表示,就可以限制這個(gè)值,例如介于0和2之間的一個(gè)數(shù)字。
一般情況下,在訪問狀態(tài)時(shí)最好提供屬性而不是字段,因?yàn)檫@樣可以更好地控制各種行為,這個(gè)選擇不會(huì)影響使用對(duì)象實(shí)例的代碼,因?yàn)槭褂脤傩院妥侄蔚恼Z法是相同的。對(duì)屬性的讀寫訪問也可以由對(duì)象來明確定義。某些屬性是只讀的,只能查看它們的值,而不能改變它們(至少不能直接改變)。這常常是同時(shí)讀取幾個(gè)狀態(tài)的一個(gè)有效技巧。CupOfCoffee類有一個(gè)只讀屬性Description,在請(qǐng)求它時(shí),就返回一個(gè)字符串,表示該類的一個(gè)實(shí)例的狀態(tài)(例如前面給出的字符串)。也可以通過查看幾個(gè)屬性,把相同的數(shù)據(jù)組合起來,但這樣的屬性可以節(jié)省時(shí)間和精力。還可以有只寫的屬性,其操作方式是類似的。
除了對(duì)屬性的讀/寫訪問外,還可以為字段和屬性指定另一種訪問權(quán)限,稱為可訪問性??稍L問性確定了什么代碼可以訪問這些成員,它們可用于所有代碼(公共)還是只能用于類中的代碼(私有),或者使用更復(fù)雜的模式。常見的情況是把字段設(shè)置為私有,通過公共屬性訪問它們。這樣,類中的代碼就可以直接訪問存儲(chǔ)在字段中的數(shù)據(jù),而公共屬性禁止外部用戶訪問這些數(shù)據(jù),以防外部用戶在其中放置無效的內(nèi)容。公共成員是類公開的成員。
要更清晰地闡明這個(gè)問題,可以把可訪問性與變量的作用域等同起來。例如,私有字段和屬性可以看成擁有它們的對(duì)象的局部成員,而公共字段和屬性的作用域也包括對(duì)象以外的代碼。
點(diǎn)擊加載更多評(píng)論>>