C#屬性訪問器Set與Get詳解
更新時間:2026年01月09日 09:15:59 作者:鈺fly
本文總結(jié)了C#中屬性Set和Get訪問器的核心概念,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
一、核心概念對比
| 概念 | 定義 | 作用 | 訪問權(quán)限 | 示例 |
|---|---|---|---|---|
| 字段 | private string name; | 存儲數(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.自動屬性(語法糖)
// 編譯器自動生成私有字段
public bool Sex { get; set; }
public int Age { get; set; }三、Set 和 Get 訪問器的本質(zhì)
Set 訪問器
// 本質(zhì):一個設(shè)置值的方法
public string Name
{
set // 相當(dāng)于:public void SetName(string value)
{
_name = value; // value 是用戶傳入的值
}
}
// 使用:p.Name = "張三";
// 相當(dāng)于:p.SetName("張三");Get 訪問器
// 本質(zhì):一個獲取值的方法
public string Name
{
get // 相當(dāng)于:public string GetName()
{
return _name;
}
}
// 使用:string name = p.Name;
// 相當(dāng)于:string name = p.GetName();四、訪問器的實際應(yīng)用(重要)
1.添加驗證邏輯
private int _age;
public int Age
{
get { return _age; }
set
{
if (value < 0 || value > 200)
throw new Exception("年齡必須在0-200之間");//做一個限定值 不在值內(nèi)報異常
_age = value;
}
}2.添加額外邏輯
private string _name;
public string Name
{
get
{
Console.WriteLine("獲取Name值");
return _name + " 視覺67班"; // 返回時添加額外信息
}
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;
// 第二版:改為屬性,添加驗證
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
八、常見錯誤
? 錯誤1:無限遞歸
public string Name
{
get { return Name; } // ? 遞歸調(diào)用自身
set { Name = value; } // ? 遞歸調(diào)用自身
}
// ? 正確:引用字段
public string Name
{
get { return _name; } // ?
set { _name = value; } // ?
}? 錯誤2:忘記字段
public int Score
{
get { return ???; } // ? 沒有字段可返回
set { ??? = value; } // ? 沒有字段可賦值
}
// ? 正確:先定義字段
private int _score;
public int Score
{
get { return _score; }
set { _score = value; }
}九、一句話總結(jié)
字段存儲數(shù)據(jù)要私有,屬性訪問數(shù)據(jù)要公有。Set 是設(shè)置值的方法,Get 是獲取值的方法。需要驗證用完整屬性,簡單情況用自動屬性。
到此這篇關(guān)于C#屬性訪問器Set與Get詳解的文章就介紹到這了,更多相關(guān)C#屬性訪問器Set與Get內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c#高效的線程安全隊列ConcurrentQueue<T>的實現(xiàn)
這篇文章主要介紹了c#高效的線程安全隊列ConcurrentQueue<T>的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
C#中String.LastIndexOf方法小結(jié)
String.LastIndexOf()是C#中string類的一個方法,它用于在字符串中查找指定子字符串(或字符)最后一次出現(xiàn)的位置,并返回其索引,本文主要介紹了C#中String.LastIndexOf方法小結(jié),感興趣的可以了解一下2024-01-01

