Home [C# 筆記] 建立屬性(get/set)
Post
Cancel

[C# 筆記] 建立屬性(get/set)

所謂的「屬性」就是「用來表示物件靜態的特徵」。

語法

普通屬性

普通屬性

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; 

getset本質就是兩個函數。

如果要對「屬性」進行限定,可以在「建造函數」裡面做就可以了。

範例

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 建構資訊系統實戰經典教本

This post is licensed under CC BY 4.0 by the author.

[C# 筆記] 建立物件(Creating Object)

[C# 筆記] 屬性(get/set)對非法值進行限定的三種方法