C#屬性訪問器Set與Get詳解
一、核心概念對比
| 概念 | 定義 | 作用 | 訪問權(quán)限 | 示例 |
|---|---|---|---|---|
| 字段 | private string name; | 存儲(chǔ)數(shù)據(jù) | 通常私有 | private int age; |
| 屬性 | public string Name { get; set; } | 訪問數(shù)據(jù) | 通常公有 | public int Age { get; set; } |
二、屬性的三種寫法
1.完整寫法(原始寫法)
private string _name; // 私有字段
public string Name // 公有屬性
{
get
{
return _name; // 返回字段值
}
set
{
_name = value; // 設(shè)置字段值
}
}2.簡化寫法
// 如果只是簡單傳遞值,可以簡化
private int _id;
public int Id { get { return _id; } set { _id = value; } }3.自動(dòng)屬性(語法糖)
// 編譯器自動(dòng)生成私有字段
public bool Sex { get; set; }
public int Age { get; set; }三、Set 和 Get 訪問器的本質(zhì)
Set 訪問器
// 本質(zhì):一個(gè)設(shè)置值的方法
public string Name
{
set // 相當(dāng)于:public void SetName(string value)
{
_name = value; // value 是用戶傳入的值
}
}
// 使用:p.Name = "張三";
// 相當(dāng)于:p.SetName("張三");Get 訪問器
// 本質(zhì):一個(gè)獲取值的方法
public string Name
{
get // 相當(dāng)于:public string GetName()
{
return _name;
}
}
// 使用:string name = p.Name;
// 相當(dāng)于:string name = p.GetName();四、訪問器的實(shí)際應(yīng)用(重要)
1.添加驗(yàn)證邏輯
private int _age;
public int Age
{
get { return _age; }
set
{
if (value < 0 || value > 200)
throw new Exception("年齡必須在0-200之間");//做一個(gè)限定值 不在值內(nèi)報(bào)異常
_age = value;
}
}2.添加額外邏輯
private string _name;
public string Name
{
get
{
Console.WriteLine("獲取Name值");
return _name + " 視覺67班"; // 返回時(shí)添加額外信息
}
set
{
Console.WriteLine($"設(shè)置Name值: {value}");
_name = value;
}
}3.只讀或只寫屬性
// 只讀屬性(只有g(shù)et)
public string Id { get; } = Guid.NewGuid().ToString();
// 私有set
public string Name { get; private set; }
// 只寫屬性(不常見)
private string _secret;
public string Secret { set { _secret = value; } }六、為什么要用屬性而不是字段
1.數(shù)據(jù)封裝
// ? 不好:直接暴露字段
public int Age; // 外部可以直接設(shè)置為負(fù)值
// ? 好:通過屬性控制
private int _age;
public int Age
{
get { return _age; }
set
{
if (value >= 0 && value <= 150)
_age = value;
}
}2.向后兼容
// 第一版:直接使用字段
public int Score;
// 第二版:改為屬性,添加驗(yàn)證
private int _score;
public int Score
{
get { return _score; }
set
{
if (value >= 0 && value <= 100)
_score = value;
}
}
// 外部代碼無需修改,仍然使用 obj.Score3.數(shù)據(jù)綁定支持
// WPF、WinForms 等 UI 框架支持屬性綁定
public string UserName { get; set; } // 可以綁定到 TextBox
八、常見錯(cuò)誤
? 錯(cuò)誤1:無限遞歸
public string Name
{
get { return Name; } // ? 遞歸調(diào)用自身
set { Name = value; } // ? 遞歸調(diào)用自身
}
// ? 正確:引用字段
public string Name
{
get { return _name; } // ?
set { _name = value; } // ?
}? 錯(cuò)誤2:忘記字段
public int Score
{
get { return ???; } // ? 沒有字段可返回
set { ??? = value; } // ? 沒有字段可賦值
}
// ? 正確:先定義字段
private int _score;
public int Score
{
get { return _score; }
set { _score = value; }
}九、一句話總結(jié)
字段存儲(chǔ)數(shù)據(jù)要私有,屬性訪問數(shù)據(jù)要公有。Set 是設(shè)置值的方法,Get 是獲取值的方法。需要驗(yàn)證用完整屬性,簡單情況用自動(dòng)屬性。
到此這篇關(guān)于C#屬性訪問器Set與Get詳解的文章就介紹到這了,更多相關(guān)C#屬性訪問器Set與Get內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解c# 強(qiáng)制轉(zhuǎn)換和類型轉(zhuǎn)換
這篇文章主要介紹了c# 強(qiáng)制轉(zhuǎn)換和類型轉(zhuǎn)換的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下2020-10-10
C#中將dateTimePicker初始值設(shè)置為空
本文主要介紹了C#中將dateTimePicker初始值設(shè)置為空,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
關(guān)于C#連接FTP時(shí)路徑問題的解決方法
最近在工作中遇到一個(gè)需求,需要利用C#連接FTP,在連接過程中遇到一個(gè)問題,所以下面這篇文章主要給大家介紹了關(guān)于C#連接FTP時(shí)路徑問題的解決方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-08-08
C#開發(fā)教程之利用特性自定義數(shù)據(jù)導(dǎo)出到Excel
這篇文章主要介紹了C#開發(fā)教程之利用特性自定義數(shù)據(jù)導(dǎo)出到Excel的相關(guān)資料,需要的朋友可以參考下2016-07-07

