網(wǎng)站首頁 編程語言 正文
在C#程序中經(jīng)常會看到set,get的配套使用,很多人不知道它的用途。我就在這向大家講講,也加深一下自己的印象。
//這里有兩個類
public class person1
{
public string name;
}
public class person2
{
public string Name{set;get;}
}
我們可以看到,第一個類中的name是沒有封裝的,第二給則用到{get;set;} ?關(guān)鍵字進(jìn)行封裝。其實(shí)含義也是很簡單,get與set分別對應(yīng)的是可讀與可寫。其實(shí)以前的代碼是這樣寫的,只是現(xiàn)在的.net框架可以忽略成上面那樣
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
區(qū)別:當(dāng)實(shí)例化第一個“person1”這個類時,系統(tǒng)在分配內(nèi)存空間時對name屬性直接分配內(nèi)存,之后對name屬性的操作也是直接操作內(nèi)存中name屬性所在的這個塊;而當(dāng)實(shí)例化第二個人“person2”類型時,系統(tǒng)會先分配一個叫name的private私有的內(nèi)存空間,讀與寫的操作都是通過Name這個public的類似于指針的東西來關(guān)聯(lián)name進(jìn)行,以此達(dá)到封裝的目的,并且通過get和set關(guān)鍵字也可以控制可讀還是可寫。
簡單的說就是控制字段的讀寫權(quán)限。
再舉例說明下:
假設(shè)類是一銀行,既能存錢也能取錢
? ? Private Money;
? ? Private class bank()
? ? {
? ? ? get
? ? ? {
? ? ? ? ?return Money;
? ? ? }
? ? ? Set
? ? ? {
? ? ? ? ?Money=value;
? ? ? }
? ? }
Money 就像銀行里的自動取款機(jī),你看不見里面的Money,但你能用set(存錢),用get(取錢)。Money是一個私有字段,是分裝在類中的,類以外的程序不能直接訪問的。C#中g(shù)et、set用法中,類的set和get成員是外部程序訪問類內(nèi)部屬性的唯一方法,就像你去銀行取錢,你不能直接從銀行的保險柜里拿錢,而是銀行營業(yè)人員把錢取出來給你的。
屬性在調(diào)用者看來就像一個普通的變量,但作為類的設(shè)計(jì)者,你可以利用屬性來隱藏你類中的一些字段,使外界只能通過屬性來訪問你的字段,你可以通過屬性來限制外界對你的字段的存取,就利用get、set。如果想讓用戶隨意存取你的字段,那么就實(shí)現(xiàn)get、set;如果只想讓用戶讀取字段,就只實(shí)現(xiàn)get;若只想讓用戶寫字段就只實(shí)現(xiàn)set。同時還可以在set和get中對用戶傳遞的值進(jìn)行一些驗(yàn)證工作,以確保你的字段將含有正確的值。
? ? Private int a;
? ? Public int index
? ? {
? ? ? get
? ? ? {
? ? ? ? return a;
? ? ? }
? ? ? set
? ? ? {
? ? ? ? ?If (value>0)
? ? ? ? ? ?a=value;
? ? ? ? ?else
? ? ? ? ? ?a=0;
? ? ? }
? ? }
可看出,get、set用法中一則是隱藏組件或類內(nèi)部的真是成員;
二是用來建立約束的,比如,實(shí)現(xiàn)“有我沒你”這種約束;
三是用來響應(yīng)屬性變化事件,當(dāng)屬性變化是做某事,只要寫在set方法里就行。
當(dāng)你想讀出或?qū)懭雽傩缘闹禃r,存取標(biāo)志限定了被實(shí)現(xiàn)的語句。用于讀出屬性的值的存取標(biāo)志記為關(guān)鍵字get,而要修改屬性的值的讀寫符標(biāo)志記為set。
原文鏈接:https://blog.csdn.net/m0_60150025/article/details/127786985
相關(guān)推薦
- 2022-09-26 快速搭建 ElasticSearch學(xué)習(xí)環(huán)境
- 2023-04-26 React使用PropTypes實(shí)現(xiàn)類型檢查功能_React
- 2022-01-21 什么是前端開發(fā)?什么是后端開發(fā)?
- 2022-12-15 Android?NotificationListenerService?通知服務(wù)原理解析_Andro
- 2022-07-21 HCIP---BGP ---邊界網(wǎng)關(guān)協(xié)議
- 2022-06-16 golang?gorm的預(yù)加載及軟刪硬刪的數(shù)據(jù)操作示例_Golang
- 2022-06-21 Android?使用flow實(shí)現(xiàn)倒計(jì)時的方式_Android
- 2024-04-05 idea使用docker生成鏡像(打包鏡像,導(dǎo)入鏡像,導(dǎo)出鏡像)
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支