字段、屬性、方法、構造函式
- 字段:儲存數據
- 屬性:保護字段,對字段的取值和設值進行設定
- 方法:描述對象的行為
- 構造函數:初始化對象(給對象的每個屬性依次的賦值)
- 類別中的成員,如果不加訪問修飾符,默認都是private
field 字段=欄位 對象=物件
用new創建對象
new 做了三件事
- 在內存中開辟一塊空間
- 在開辟的空間中創建對象
- 調用物件的構造函數
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兩個作用
- 調用自己類別的成員(當前類別的對象)
this.成員名 - 調用自己類別的構造函式(當前類的構造函式)
: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("我是靜態方法");
}
}
|