Home [C# 筆記] class property method field review
Post
Cancel

[C# 筆記] class property method field review

字段、屬性、方法、構造函式

  • 字段:儲存數據
  • 屬性:保護字段,對字段的取值和設值進行設定
  • 方法:描述對象的行為
  • 構造函數:初始化對象(給對象的每個屬性依次的賦值)
  • 類別中的成員,如果不加訪問修飾符,默認都是private

field 字段=欄位 對象=物件

用new創建對象

new 做了三件事

  1. 在內存中開辟一塊空間
  2. 在開辟的空間中創建對象
  3. 調用物件的構造函數
1
2
3
4
//用new 創建對象
//new 1.在內存中開辟一塊空間 2.在開辟的空間中創建對象 3. 調用對象的構造函數
Person person = new Person("Ri", -99, '中');//在創建對象的時候,傳入參數
person.SayHello();

構造函式

  • 構造函式沒有void, 沒有返回值
  • 構造函式名跟類別名一樣
  • 構造函數可以幫我們在創建物件的時候傳入參數
1
2
3
4
5
6
7
8
9
10
11
12
class Person {
    //構造函式沒有void, 沒有返回值
    //構造函式名跟類別名一樣
    public Person(string name, int age, char gender) //當調用構造函數的時候,幫我們傳入一些參數
    {
        //當傳入的三個值,可以幫我們分別給這個對象的屬性
        if (name != "Rii") name = "Rii"; //在構造函式裡為name做限定
        this.Name = name;
        this.Age = age;
        this.Gender = gender;
    }
} 

屬性

屬性的本質,就是兩個方法get set

1
2
3
4
5
6
7
8
9
10
//類別的成員沒有加上訪問修飾符,默認是 private
string _name;
/// <summary>
/// 屬性的本質,就是兩個方法 get set
/// </summary>
public string Name
{
    get { return _name; }
    set { _name = value; }
}

我們可以在三個地方做條件的判斷限定:構造函數中、屬性的兩個方法get,set中做限定

this 當前類別的對象

1
2
3
4
5
public void SayHello() 
{
    //this.當前類別的對象 (Name,Age,Gender是屬性)
    Console.WriteLine($"我是{this.Name},今年{this.Age}歲,我是{this.Gender}生");
}

this可以省略,但有個情況最好還是寫上this
因為this可以區分局部變量(區域變數)與屬性

1
2
3
4
5
6
7
public void SayHello()
{
    string Name = "JJ"; //區域變數
    //this.當前類別的對象
    //如果Name沒有加上this, Name會是"JJ",就不是屬性的Name
    Console.WriteLine($"我是{Name},今年{this.Age}歲,我是{this.Gender}生");
}

調用實體方法,靜態方法

  • 調用實體方法:物件名.方法名
  • 調用靜態方法:類別名.方法名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//用new創建對象
//new 1.在內存中開辟一塊空間 2.在開辟的空間中創建對象 3. 調用對象的構造函數
Person person = new Person("Ri", -99, '中');//在創建對象的時候,傳入參數
person.SayHello(); //調用實體方法:物件名.方法名
Person.SayHelloTwo(); //調用靜態方法:類別名.方法名

class Person {
    //實體方法
    public void SayHello() { 
        //this.當前類別的對象
        Console.WriteLine($"我是{this.Name},今年{this.Age}歲,我是{this.Gender}生");
    }
    //靜態方法
    public static void SayHelloTwo() { 
        Console.WriteLine("我是靜態方法");
    }
}

靜態函式只能訪問靜態成員

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private int total;//實體成員
private static int count;//靜態成員
public static void SayHelloTwo() //靜態方法
{
    count = 0; //靜態方法,只能訪問靜態成員,所以不能訪問total
    Console.WriteLine("我是靜態方法");
}

//實體函式兩個皆可訪問
public void SayHello() //實體函式
{
    total = 100; //實體成員
    count = 10; //靜態成員
    //this.當前類別的對象
    Console.WriteLine($"我是{this.Name},今年{this.Age}歲,我是{this.Gender}生");
}

this兩個作用

  1. 調用自己類別的成員(當前類別的對象)this.成員名
  2. 調用自己類別的構造函式(當前類的構造函式):this(參數列表)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Person
{
    //全參構造函式
    public Person(string name, int age, char gender)
    {
        //當傳入的三個值,可以幫我們分別給這個對象的屬性
        if (name != "Rii") name = "Rii"; //在構造函式裡為name做限定
        this.Name = name;
        this.Age = age;
        this.Gender = gender;
    }

    public Person(string name, char gender) : this(name, 0, gender)
    {
        // : this(name, 0, gender) 調用自己類別的構造函式
        //因為會調用全參的構造函式,所以這邊的兩行程式碼就不用寫了
        //this.Name = name;
        //this.Gender = gender;
    }
}

: this(name, 0, gender)調用自己類別的構造函式
因為會調用全參的構造函式,所以這邊相同的兩行程式碼就不用寫了

完整Code

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//用new創建對象
//new 1.在內存中開辟一塊空間 2.在開辟的空間中創建對象 3. 調用對象的構造函數
Person person = new Person("Ri", -99, '中');//在創建對象的時候,傳入參數
person.SayHello(); //調用實體方法:物件名.方法名
Person.SayHelloTwo(); //調用靜態方法:類別名.方法名

public class Person
{
    //構造函式沒有void, 沒有返回值
    //構造函式名跟類別名一樣
    public Person(string name, int age, char gender) //當調用構造函數的時候,幫我們傳入一些參數
    {
        //當傳入的三個值,可以幫我們分別給這個對象的屬性
        if (name != "Rii") name = "Rii"; //在構造函式裡為name做限定
        this.Name = name;
        this.Age = age;
        this.Gender = gender;
    }

    public Person(string name, char gender) : this(name, 0, gender)
    {
        //因為會調用全參的構造函式,所以這邊的兩行程式碼就不用寫了
        //this.Name = name;
        //this.Gender = gender;
    }
    //類別的成員沒有加上訪問修飾符,默認是 private
    string _name;
    /// <summary>
    /// 屬性的本質,就是兩個方法 get set
    /// </summary>
    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

    int _age;
    public int Age
    {
        get
        {
            //在get裡做限定
            if (_age < 0 || _age > 100)
            {
                return _age = 0;
            }
            return _age;
        }
        set { _age = value; }
    }

    char _gender;
    public char Gender
    {
        get { return _gender; }
        set
        {
            //在set裡做限定
            if (value != '男' || value != '女')
            {
                value = '男';
            }
            _gender = value;
        }
    }

    public void SayHello()
    {
        total = 100;
        count = 10;//靜態成員
        //this.當前類別的對象
        Console.WriteLine($"我是{this.Name},今年{this.Age}歲,我是{this.Gender}生");
    }
    private int total;//實體成員
    private static int count;//靜態成員
    public static void SayHelloTwo()
    {
        count = 0; //靜態方法,只能訪問靜態成員,所以不能訪問total
        Console.WriteLine("我是靜態方法");
    }
}
This post is licensed under CC BY 4.0 by the author.