C# - 物件導向基礎 Class

  1. 物件導向即透過物件互動來完成工作
  2. Class 分成屬性(property)與方法(method)兩部分
    • class Student
    • property: Student ID, Name, Grade
    • Method:Say,Walk….
  3. Class 像一個設計圖,根據設計圖可以用此建立不同的物件
  4. Class 裡面的 property 跟 method 要 public 才能被外部 method 取用在建立物件
1
2
3
4
5
6
7
class Student
{
//property
public int StudentID;
public string Name;
public int Grade;
}
  1. method 格式:

`public 輸出的型別 method 名稱(輸入型別與名稱)

1
2
3
4
5
6
7
8
9
10
class Student
{
//method;
public string Say()
{
// method 的內容
return "我叫" + Name + ", 我是" + Grade + "年級的學生";
}

}
  1. 要使用物件,必須使用 class 的變數存取並且用關鍵字 new() 宣告才會真正建立物件
  2. 如果沒有輸出值,就要用 void 代替輸出值
  3. 如果要取得輸入值,必須用類似宣告變數的方式宣告輸入值,例如 talk 這個 method 有 2 個輸入值,字串 sname 與數字 sgrade ,那就要打成 p…. talk(string sname, int sgrade) { 定義 method }
  4. 將資料包裝成物件可以幫助重複使用資料
  5. 將物件傳入其他物件的 method 中使用就是一種「物件互動」的方式

範例

  • 建立一個車子的 Class,並且新增兩個 method,分別叫做 speedUp 與 crash。
  • 把車子剛建立時的速度設為 0,並建立兩輛車子 A, B
  • 假設 A, B 這兩輛車子相向而行,如果呼叫 speedUp() 就會加速(Ex: +10 km/hr)。
  • 然後 crash 接受一個輸入值,代表被撞的車
  • 呼叫 crash 就會輸出字串「XX 車撞上 YY 車」
  • 模擬 A 車以 100 km/hr 的速度撞上 B 車
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// class
class Motor
{
public string color;
public string name;
public int speed;

public string Run()
{
return color + "的"+name+"車子正以時速," + speed + "前進";

}
public void speedUp()
{
speed += 10;
}
public string crash(Motor b)
{
return name + "車以" + speed + "km/hr速度撞上了" + b.name + "車";
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
private void button1_Click(object sender, EventArgs e)
{

Motor a = new Motor();
a.name = "Benz";
a.color = "藍色";
a.speed = 0;

Motor b = new Motor();
b.name = "福斯";
b.color = "紅色";
b.speed = 50;

for(int i = 0; i < 10; i++)
{
a.speedUp();
MessageBox.Show(a.Run()+"而且加速中當"+b.Run());
if (a.speed == 100)
{
MessageBox.Show(a.crash(b));
}
}

}

static 修飾字

  1. 在「類別」內宣告的變數(即屬性)前面加上 static,這個變數在類別內就變成靜態變數
  2. 靜態變數必須在方法外面宣告
  3. 靜態變數離開方法後,變數值不會被釋放掉。下次再呼叫此方法時,保留的變數值仍可繼續使用,所以變數的生命週期是直到程式停止執行為止
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Test
{
public static int max(int a, int b)
{
int result;
if (a < b)
{
result = b;
}
else
{
result = a;
}
return result;
}
}
1
2
3
int a = 10;
int b = 20;
int c = Test.max(a,b);
  1. 程式執行的時候由於物件屬性是被放在 Heap 區,靜態變數被放在全域變數區,因此物件屬性必須建立物件實體才能使用,但是靜態變數不必建立物件實體就能存取,而且允許多個物件共用一份靜態變數。
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
class Student
{
public int StudentID;
public string Name;
public int Grade;
public int Score;
public static int PassScore = 60;

public Student(int studentID, string name)
{
StudentID = studentID;
Name = name;
Grade = 1;
}

public Student(int studentID, string name,int grade)
{
StudentID = studentID;
Name = name;
Grade = grade;
}

public bool isPass()
{
if (Score >= PassScore)
{
return true;
}
else
{
return false;
}
}

}
1
2
3
4
5
6
7
8
9
10
private void button1_Click(object sender, EventArgs e)
{
Student s1 = new Student(10201,"小吧");
Student s2 = new Student(10202, "小楊",3);
s1.Score = 20;
s2.Score = 80;
Student.PassScore = 20;

MessageBox.Show("我是"+s1.Name+"我的成績是否通過"+s1.isPass());
}
  1. static class(靜態類別) 不可以用來建立物件。不可使用 new 關鍵字建立物件。例如以下的 Math 是存放數學運算式

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2020 CYC'S BLOG All Rights Reserved.

UV : | PV :