• 沒有找到結果。

類别與物件

N/A
N/A
Protected

Academic year: 2022

Share "類别與物件"

Copied!
58
0
0

加載中.... (立即查看全文)

全文

(1)

1

ASP.NET 網頁設計入門(使用 C#)

講師︰唐士軒

CSIE NTU

(2)

Outline

z

類别與物件

z欄位與屬性 z方法

z靜態成員 z方法多載 z建構式

(3)

命名空間 (1)

z 使用命名空間的好處可以將功能類似的類別組 織在一起

z 命名空間允許巢狀的結構,形成階層式的架 構,更容易分類管理

z 若在同一個程式檔中宣告二個名稱一樣的類別 時,編譯會發生錯誤,我們可以利用命名空間 來解決此問題

z 利用 using 關鍵字來指定需要的命名空間 z 語法

namespace 命名空間名稱

{

類別;

}

(4)

命名空間 (2)

z 用法

namespace IBM

{

class Notebook

{ } }

namespace Compaq

{

class Notebook

{ }

(5)

類别

z類別主要的功能是用來描述定義物件的 模樣

z類別主要包含下列成員

z欄位 (field)

z屬性 (property)

z方法 (method)

z事件 (event)

(6)

類別實例

z 我們可以建立一個用來描述『一台車子』的類 別

z 在該類別中,可以建立有關車子的欄位資料,

像是車牌號碼、排氣量…

z 接著設定該類別的屬性,讓使用者可以藉由屬 性存取類別中的欄位資料

z 一台車子的功能包含前進、後退、換車牌、顯 示目前油量等,可定義於類別方法中

z 該類別的可能事件有警報聲響起,發生碰撞,

車門被開啟…

(7)

定義類別

z 語法

存取修飾詞 class 類別名稱

{

類別成員;

}

z 用法

public class car

{

string id;

}

z 類別存取修飾詞

z public – 不同組件也可以被引用

z internal – 用一個組件才可以被引用 (預設)

(8)

物件

z 我們可以把類別想像成是車子架構的設計圖,

而物件就是根據車子架構設計圖所設計出來的 車子

z 類別的使用需產生該類別的實體物件,我們可 以透過 new 關鍵字來完成

z 語法

z 類別名稱 物件名稱 = new 類別名稱();

z 用法

z car myCar = new car();

z car myCar;

myCar = new car();

(9)

實例探討 sample4-a1 (1)

z程式功能

z定義一個 car 類別

z在主程式中產生 car 實體物件

(10)

實例探討 sample4-a1 (2)

z 程式內容

namespace sample5_a2

{

class Class1

{

static void Main(string[] args)

{

car c = new car();

} }

class car

{ } }

(11)

Outline

z類别與物件 z

欄位與屬性

z方法

z靜態成員 z方法多載 z建構式

(12)

成員存取修飾詞

z public

z 任何外部類別都可不受限制存取此類別成員

z private

z 此類別成員只能在此類別中使用

z protected

z 此類別成員可在此類別及繼承此類別的子類別使用

z internal

z 在同一個組件中都可存取此類別成員

z protected internal

z 提供 protected 及 internal 二種存取方式

(13)

欄位成員

z 欄位為類別中所定義的各種資料型別變數

z 當我們產生實體物件後,可透過 "." 來存取欄 位資料

z ex︰myCar.id

z 語法

z 存取修飾詞 資料型別 欄位名稱;

z 用法

z private string id;

z public int num;

(14)

實例探討 sample4-a2 (1)

z 程式功能

z 建立 car 類別

z 在 car 類別中定義 id 欄位 z 設定並列印出 id 欄位的值

z 程式內容

class car {

public string idField; //類別欄位 (field) }

(15)

實例探討 sample4-a2 (2)

z 程式內容

static void Main(string[] args) {

//產生實體物件 car c = new car();

//設定並列印結果

c.idField = "ABC-123";

Console.WriteLine("車牌號碼︰" + c.idField);

}

(16)

屬性成員 (1)

z 屬性用來存取類別的欄位值

z 實體物件一樣可透過 "." 來存取屬性資料 z 語法

存取修飾詞 資料型別 屬性名稱

{

get

{

return 欄位名稱;

}

set

{

欄位名稱 = value;

(17)

屬性成員 (2)

z 用法

public string id {

get {

return idField;

} set {

idField = value;

} }

z 說明

z 我們可以只設定 get 部份讓該屬性成唯讀屬性

(18)

欄位與屬性成員

z利用將欄位成員設定成 public,讓實體物 件可以直接存取的方法雖然簡單,但卻 無法提供任何額外的控制

zex︰speed 欄位只能介於 1 ~ 100 之間

z較好的設計方式為將欄位設定成

private,讓實體物件透過屬性成員來存取 欄位成員的值

z我們可以在定義屬性成員時,加入存取 方式的控制

(19)

實例探討 sample4-a3 (1)

z程式功能

z建立 car 類別

z在 car 類別中定義 speed 欄位、speed 屬性 z speed 屬性值介於 0 ~ 100 間

z程式內容

class car {

private int speedField; //類別欄位 (field)

(20)

實例探討 sample4-a3 (2)

z 程式內容

public int speed

{

get

{

return speedField;

}

set

{

if(value < 0) value = 0;

else if(value >100) value = 100;

speedField = value;

}

(21)

實例探討 sample4-a3 (3)

z程式內容

static void Main(string[] args) {

car myCar = new car();

myCar.speed = -200;

Console.WriteLine("目前車速︰" +

myCar.speed);

}

(22)

課堂練習 sample4-b1 (1)

z類別功能

z建立 empolyee 類別

z類別中含有 baseSalary、salary 及 benefit 屬 性

zbaseSalary 屬性必須大於等於 0

zsalary 為唯讀屬性,其值為 baseSalary 加上 benefit

z程式功能

z主程式中請使用者輸入底薪及獎金值

z列印出類別 salary 屬性值

(23)

課堂練習 sample4-b1 (2)

z基本概念

z在 baseSalary 屬性定義中判斷使用者輸入的 資料是否正確

z在 salary 屬性定義中,不設定 set ,並且 get

回傳值為 baseSalary 加上 benefit

(24)

Outline

z類别與物件 z欄位與屬性 z

方法

z靜態成員 z方法多載 z建構式

(25)

方法成員 (1)

z方法是用來定義類別提供的特定功能

z實體物件可透過 "." 來呼叫方法成員,但 在方法成員名稱後需加上 () 來說明傳入 的參數值

z語法

存取修飾詞 回傳值 方法名稱 (傳入參數) {

方法內容程式區塊;

}

(26)

方法成員 (2)

z用法

public void hello() {

Console.WriteLine("您好");

}

z說明

zvoid 表示沒有回傳值

z() 內為空白時,表示不需要傳作參數

(27)

實例探討 sample4-a4 (1)

z 程式功能

z 建立 car 類別

z 在 car 類別中定義 id 屬性及 showId 方法

z 程式內容

class car {

private string idField; //類別欄位 (field)

public void showId() //類別方法 (method) {

Console.WriteLine("車牌號碼︰" + idField);

}

(28)

實例探討 sample4-a4 (2)

z程式內容

public string id //類別屬性 (property) {

get { return idField; } set { idField = value; } }

}

(29)

實例探討 sample4-a4 (3)

z程式內容

static void Main(string[] args) {

car myCar = new car();

myCar.id = "ABC-123";

myCar.showId();

Console.ReadLine();

}

(30)

參數傳遞與回傳值 (1)

z 類別的方法可以定義傳入的參數及回傳值,因 此我們可以把需要運算的參數傳給方法,在方 法中計算完畢後再回傳結果

z 語法

存取修飾詞 回傳值型別 方法名稱

(參數1型別 參數1名稱, 參數2型別 參數2名稱, …) {

方法內容程式區塊;

}

(31)

參數傳遞與回傳值 (2)

z用法

public int add(int a, int b) {

return a + b;

}

z說明

z利用 return 關鍵字來傳遞要回傳的值

z注意型別須一致

(32)

實例探討 sample4-a5 (1)

z 程式功能

z 建立 Caculator 類別

z 定義二數相加 add 方法

z 程式內容

class Caculator {

public int add(int a, int b) {

return a + b;

} }

(33)

實例探討 sample4-a5 (2)

z程式內容

static void Main(string[] args) {

Caculator myCaculator = new Caculator();

Console.WriteLine(myCaculator.add(10,20));

}

(34)

課堂練習 sample4-b2

z類別功能

z建立 graph 類別

z類別中含有 drawRectangle 方法,可傳入長 及寬二整數值,並繪出該矩形

z程式功能

z請使用者輸入長及寬

z呼叫該方法並將使用者輸入資料當為傳入參

(35)

Outline

z類别與物件 z欄位與屬性 z方法

z

靜態成員

z方法多載 z建構式

(36)

靜態成員 (1)

z類別中的靜態成員不需要產生實體物件 即可直接存取引用

z靜態成員必須使用 static 關鍵字進行宣告 z引用靜態成員方式,直接使用類別名稱

再利用 "." 連接靜態成員名稱即可 zMain 就是一個靜態方法成員

(37)

靜態成員 (2)

z 語法

存取修飾詞 static 回傳值 方法名稱 (傳入參數) {

方法內容程式區塊;

}

z 用法

z static void Main(string[] args)

z 說明

z Main 方法為靜態成員,傳入值為一字串陣列,沒有 回傳值、存取限制為預設的 private

(38)

實例探討 sample4-a6 (1)

z 程式功能

z 建立 Caculator 類別

z 定義二數相加 add 靜態方法

z 程式內容

class Caculator {

public static int add(int a, int b) {

return a + b;

} }

(39)

實例探討 sample4-a6 (2)

z程式內容

static void Main(string[] args) {

//列印結果

Console.WriteLine(Caculator.add(10,20));

}

(40)

課堂練習 sample4-b3

z類別功能

z建立 console 類別

z類別中含有 query 靜態方法,可傳入一問 句,並回傳使用者所鍵入的值

z程式功能

z實際測試該類別

z基本概念

zquery 靜態方法可傳入一個 string 參數,在

方法中先列印該參數值至螢幕上,讀進使用

者輸入 的資料後,回傳其結果

(41)

Outline

z類别與物件 z欄位與屬性 z方法

z靜態成員 z

方法多載

z建構式

(42)

方法多載

z方法多載允許我們將傳入參數不同的方 法,定義成相同的名稱

z當我們在定義二數相加的方法時,藉由 方法多載可讓我們不需定義二個不同名 稱的方法,以區隔為二個整數相加或二 個浮點數相加

(43)

實例探討 sample4-a7 (1)

z 程式功能

z 建立 Caculator 類別

z 定義二數相加 add 靜態方法

z 分別傳入整數及浮點數進行計算

z 程式內容

class Caculator {

//add for 整數相加..

public static int add(int a, int b) {

return a + b;

}

(44)

實例探討 sample4-a7 (2)

z 程式內容

//add for 浮點數相加..

public static double add(double a, double b) {

return a + b;

} }

static void Main(string[] args) {

Console.WriteLine(Caculator.add(10,20));

Console.WriteLine(Caculator.add(10.5,20));

}

(45)

課堂練習 sample4-b4

z類別功能

z定義 math 類別

z類別中含有 max 方法,能傳入二或三個整 數,並回傳其中最大的一個

z程式功能

z分別以二個參數及三個參數引用該方法 z列印回傳值

z基本概念

z利用方法多載

(46)

Outline

z重複結構流程控制 (四) z類别與物件

z欄位與屬性 z方法

z靜態成員 z方法多載 z

建構式

(47)

建構式 (1)

z建構式 (Constructor)

z建構式在類別實體物件建立前即會執行,用 來初始化物件

z建構式的名稱一定要和類別名稱一樣 z建構式與方法相同允許多載

z語法

存取修飾詞 類別名稱() {

}

(48)

建構式 (2)

z用法

public car() {

idField = "ABC-123";

}

public car(string id) {

idField = id;

}

(49)

實例探討 sample4-a8 (1)

z程式功能

z建立 Caculator 類別 z定義多載建構式

z利用建構式初始化物件

z程式內容

class car {

private string idField;

(50)

實例探討 sample4-a8 (2)

z程式內容

public car()

{

idField = "ABC-123";

}

public car(string id)

{

idField = id;

}

public void showId()

{

Console.WriteLine("車牌號碼︰" + idField);

}

(51)

實例探討 sample4-a8 (3)

z 程式內容

static void Main(string[] args) {

car myCar1 = new car();

Console.Write("Car1 ");

myCar1.showId();

car myCar2 = new car("NTU-123");

Console.Write("Car2 ");

myCar2.showId();

}

(52)

課堂練習 sample4-b5

z 類別功能

z 建立 math 類別

z 類別中含有欄位值 x 及方法 square,該方法沒有傳 入,回傳值為橺位 x 的平方值

z x 的值在建構式中預設為 10

z 程式功能

z 請輸用者輸入一整數 z 列印該整數的平方值

z 當輸入 的數小於 0 時,列印預設值 10 的平方值

z 基本概念

z 在建構式中先初始化 x 的值

(53)

遞迴

z遞迴是一種本身呼叫自己的方法

z利用遞迴可以提供較為簡潔的方法進行 數學運算

z遞迴程式中,必須撰寫令遞迴結束執行 的程式碼

(54)

實例探討 sample4-a9 (1)

z程式功能

z利用遞迴進行整數和運算

z程式內容

private static int sum(int x) {

if(x==1) return 1;

else return x + sum(x-1);

}

(55)

實例探討 sample4-a9 (2)

z程式內容

static void Main(string[] args) {

Console.Write("請輸入一整數︰");

int x = int.Parse(Console.ReadLine());

Console.WriteLine("1 加至 {0} 的和為 {1}", x, sum(x));

}

(56)

課堂練習 sample4-b6

z類別功能

z在預設 Class1 類別中定義 factorial 靜態方法 zfactorial 靜態方法,可傳入一整數參數 x,

並回傳 x 的階層值

z程式功能

z請使用者輸入 x 的值 z呼叫 factorial 靜態方法 z列印出 x 的階層值

z基本概念

z利用遞迴來完成

(57)

進階練習 sample4-d1 (1)

z 程式功能

z 輸入年份及月份

z 列印出該年該月份的月曆

z 紅利

z 萬年曆 (自己判斷閏年)︰20 分 z 萬年曆 (使用類別)︰15 分

z 公式

z 逢四年閏一年 z 逢一百年不閏 z 逢四百年閏

(58)

進階練習 sample4-d1 (2)

參考文獻

相關文件

在上 一節中給出了有單位元的交換環 R 上的模的定義以及它的一些性質。 當環 R 為 體時, 模就是向量空間, 至於向量空間中的部分基本概念與定理, 有些可以移植到模上來。 例如 子

�您�� BIOS 設定完成後,請選擇本項目以�認所有設定值存入 CMOS 記憶體內。按下 &lt;Enter&gt; 鍵後�出現一個詢問視窗,選擇 [Ok],�設定值存 Ok],�設定值存 ],�設定值存 入

服務法第 16 條規定: 「公務員有隸屬關係者,無 論涉及職務與否,不得贈受財物。公務員於所辦事 件,不得收受任何餽贈。」第 18

因此以2020MEMOIR回憶錄為題,並且挑選了今年度發生的八件

 附錄 2:在 Windows XP 中將 Tera Term 設定為預設 Telnet 用戶端..  附錄

 for…迴圈自初值開始判斷 &lt;條件判斷&gt; 是否為 true,若為 true 則執行 for 迴圈內的敘述,並依 &lt;增量值&gt;,每次增 加 (或減少) 指定的增量值,直至 &lt;條件判斷&gt;

4.3.1 若要開啟 SSH,則設定為【Enabled 開啟】。不開啟,則設定為【 Disabled 關閉】。把 SSH 服務開啟,方便日後有問題可以用 SSH 連線.. VMware vSphere Client 連線 5.1

z屬性 (property) z方法 (method) z事件