所謂的「屬性」就是「用來表示物件靜態的特徵」。
語法
普通屬性
普通屬性
1
2
3
4
5
6
7
//普通屬性
private int 欄位名稱; //屬性背後的實際欄位(backing field)
public int 屬性名稱
{
get { return 欄位名稱; } //屬性的讀取方法(getter)
set { 欄位名稱 = value; } //屬性的設定方法(setter),value就是調用set方法時傳入的參數
}
- 設定屬性
set,獲取屬性get。 - 沒有實作
set方法的屬性(省略了set),就表示該屬性只能唯讀 - 沒有實作
get方法的屬性(省略了get),就表示該屬性只能唯寫 - 當指定物件屬性的值,就會被
set內的value所接收。
(value就是調用set方法時傳入的參數)
如果省略了
get,類別的內/外方法均無法訪問當前數據,無意義。
如果不需要額外邏輯時,用簡潔的寫法:自動屬性。
自動屬性
當屬性存取子不需要額外邏輯時,自動實作屬性可讓屬性宣告更加簡潔。
1
2
//自動屬性
public int 屬性名稱 { get; set;}
自動屬性-設定初始值
1
2
//自動屬性-設定初值
public DateTime StartTime { get; set; } = DateTime.Now;
get、set本質就是兩個函數。
如果要對「屬性」進行限定,可以在「建造函數」裡面做就可以了。
範例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Student
{
//寫法一:普通屬性
private string name;
public string Name
{
get { return name; } //當你輸出值的時候,會執行get方法
set { name = value; } //當你給屬性賦值的時候,首先會執行set方法
}
//寫法二:自動屬性
//不需要額外邏輯時,用自動實作屬性
//「自動屬性」寫起來比較簡潔省事,以後就用「自動屬性」來寫就可以了。
public int Age { get; set; }
//自動屬性-設定初值
public char Gender { get; set;} = '男';
}
範例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public class Car
{
private string name = "None";
private int wheelSize = 14;
private int hp = 200;
//汽車名字
public string Name
{
get { return name; }
set { name = $"Audi {value}"; }
}
//鋁圈尺寸
public int WheelSize
{
get { return wheelSize; }
set
{
//尺寸大小必須在 14~20之間
if (value <= 20 && value >= 14)
{
wheelSize = value;
}
}
}
//渦輪增壓
public bool IsTurbo { get; set; } = false;
//馬力
public int HP
{
//當 IsTurbo = true 時,馬力提升2倍
get { return (IsTurbo) ? hp * 2 : hp; }
}
//最高時速
public int MaxSpeed { get; } = 295;
//引擎技術
public string EngineTechnology
{
get { return (IsTurbo) ? "渦輪增壓" : "自然進氣"; }
}
}
Q&A
Q:attribute 與 property 這二個名詞,它們之間有差異嗎?
A:property 是指:在 class 中建立屬性,attribute是指:將類別實體化成物件所使用的屬性。
1
2
3
4
5
6
7
8
//attribute 是指:將類別實體化成物件所使用的屬性
Student student = new();
student.Name; //attribute
//property 是指:在 class 中建立屬性
public class Student {
public string Name { get; set;} //property
}
MSDN - 使用屬性 (C# 程式設計手冊)
MSDN - 自動實作的屬性 (C# 程式設計手冊)
[C# 筆記] get set 自動屬性 & 普通屬性 by R
[C# 筆記] class property method field review by R
[C# 筆記] 屬性(get/set)對非法值進行限定的三種方法 by R
[C# 筆記] 為屬性(get/set)設定初始值
Book: Visual C# 2005 建構資訊系統實戰經典教本