PREACE - OPENTECH

11
PREACE iii Visual Studio整合式開發環境可以被用來開發 Windows 應用程式、ASP.NET Web 用程式、XML Web Services、資料庫應用程式及行動裝置APP,我們可以在同一個環境下 使用Visual BasicVisual C#Visual C++ 來開發程式,並結合.NET Framework 強大功能 來簡化程式的開發工作。Visual Studio提供程式碼編輯器及使用者介面設計工具,並包括 偵錯及其它工具,可以讓您以C# 輕鬆開發應用程式。 C#是一種簡潔的物件導向語言,支援封裝 (Encapsulation)、繼承 (Inheritance) 和多型 (Polymorphism)。本書規劃的理念,期望成為一本難易適中Visual C#教材,全書架構共分 四篇:基礎語法篇、物件導向篇、視窗程式篇、多媒體與資料庫應用篇。 第一篇:基礎語法篇 從程式設計入門開始談起,接著介紹如何撰寫第一支C#主控台應用程式,然後第3-6 章的主軸在資料處理、流程控制、字串與陣列等集合類別,最後則是方法及參數。 第二篇:物件導向篇 會先討論物件導向特點、定義、成員及屬性,第8章則是直接導入C# 物件導向程式 的實作,包括:建構函式與解構函式、繼承、抽象類別、介面與運算子多載等。 第三篇:視窗程式篇 先介紹如何建立第1支視窗應用程式及與視窗程式開發的基礎知識。接下來的兩章則 是介紹各種控制項元件,最後則會談到視窗程式事件,除了滑鼠及鍵盤事件外,也會介 紹共享事件的建立與移除。 第四篇:多媒體與資料庫應用篇 包括繪圖與多媒體影音的播放、檔案I/O輸出入資料流、資料庫應用程式的建立及語 言整合查詢-LINQ的介紹。 為了提高閱讀的順暢感,在內容介紹儘量力求詳明,筆者相信這會是一本適合教學 Visual C# 入門教材,本書在校正上雖然力求細心無誤,如有疏忽之處,還望各位見 諒。 06307007-編大.indd 3 2016/5/19 上午 08:52:26

Transcript of PREACE - OPENTECH

Page 1: PREACE - OPENTECH

PREACE 序

iii

Visual Studio整合式開發環境可以被用來開發 Windows 應用程式、ASP.NET Web 應

用程式、XML Web Services、資料庫應用程式及行動裝置APP,我們可以在同一個環境下

使用Visual Basic、Visual C#和Visual C++ 來開發程式,並結合.NET Framework 強大功能

來簡化程式的開發工作。Visual Studio提供程式碼編輯器及使用者介面設計工具,並包括

偵錯及其它工具,可以讓您以C# 輕鬆開發應用程式。

C#是一種簡潔的物件導向語言,支援封裝 (Encapsulation)、繼承 (Inheritance) 和多型

(Polymorphism)。本書規劃的理念,期望成為一本難易適中Visual C#教材,全書架構共分

四篇:基礎語法篇、物件導向篇、視窗程式篇、多媒體與資料庫應用篇。

第一篇:基礎語法篇

從程式設計入門開始談起,接著介紹如何撰寫第一支C#主控台應用程式,然後第3-6

章的主軸在資料處理、流程控制、字串與陣列等集合類別,最後則是方法及參數。

第二篇:物件導向篇

會先討論物件導向特點、定義、成員及屬性,第8章則是直接導入C# 物件導向程式

的實作,包括:建構函式與解構函式、繼承、抽象類別、介面與運算子多載等。

第三篇:視窗程式篇

先介紹如何建立第1支視窗應用程式及與視窗程式開發的基礎知識。接下來的兩章則

是介紹各種控制項元件,最後則會談到視窗程式事件,除了滑鼠及鍵盤事件外,也會介

紹共享事件的建立與移除。

第四篇:多媒體與資料庫應用篇

包括繪圖與多媒體影音的播放、檔案I/O輸出入資料流、資料庫應用程式的建立及語

言整合查詢-LINQ的介紹。

為了提高閱讀的順暢感,在內容介紹儘量力求詳明,筆者相信這會是一本適合教學

的Visual C# 入門教材,本書在校正上雖然力求細心無誤,如有疏忽之處,還望各位見

諒。

06307007-編大.indd 3 2016/5/19 上午 08:52:26

Page 2: PREACE - OPENTECH

v

CONTENTS 目錄

�第一篇 VISUAL C#基礎語法篇

第 01章 程式設計的第一堂課

1-1 電腦儲存單位簡介 ........................................ 2

1-2 程式語言簡介 ............................................... 2

1-3 程式設計簡介 ............................................... 6

1-4 認識資料型態 ............................................. 10

1-5 程式撰寫原則 ............................................. 14

第 02章我的第一支 C#程式

2-1 .NET Framwork和類別庫簡介 ................... 21

2-2 Visual Studio 2013開發環境 ..................... 23

2-3 建立第 1支主控台程式 .............................. 29

2-4 C#的基礎語法 ........................................... 34

2-5 開啟舊專案與關閉 ...................................... 39

第 03章資料處理概說

3-1 變數與常數 ................................................ 46

3-2 資料型別簡介 ............................................. 52

3-3 資料型別轉換 ............................................. 65

3-4 運算子與運算式 ......................................... 70

3-5 跳脫控制字元 ............................................. 83

第 04章流程控制

4-1 結構化程式 ................................................ 91

4-2 選擇結構簡介 ............................................. 93

4-3 重複結構 ...................................................110

4-4 迴圈控制指令 ........................................... 123

4-5 程式偵錯與例外處理 ................................ 127

06307007-編大.indd 5 2016/5/19 上午 08:52:30

Page 3: PREACE - OPENTECH

vi

第 05章字串、陣列與集合類別

5-1 字串宣告與使用 ....................................... 139

5-2 陣列宣告與使用 ....................................... 151

5-3 集合 (Collection)類別 .............................. 168

第 06章方法與參數

6-1 方法宣告與使用 ....................................... 176

6-2 參數傳遞簡介 ........................................... 179

6-3 遞迴應用 .................................................. 188

6-4 方法多載 .................................................. 192

6-5 常用公用類別方法 ................................... 195

�第二篇 我的第一支 C#程式

第 07章物件導向概說

7-1 類別與物件簡介 ....................................... 209

7-2 類別的定義 .............................................. 213

7-3 物件導向程式設計的特性 ......................... 220

7-4 設定屬性 .................................................. 224

第 08章C#物件導向程式實作

8-1 建構函式 .................................................. 237

8-2 C#的繼承與介面 ..................................... 244

8-3 運算子多載 .............................................. 267

8-4 重寫 ........................................................ 271

06307007-編大.indd 6 2016/5/19 上午 08:52:32

Page 4: PREACE - OPENTECH

第 01章 

程式設計的第一堂課

電腦本身就是一堆的電路元件所形成的集合體,電腦用內部的電子開關狀態表示所

有的資料,僅能辯識電路上電流的「通」(ON)與「不通」(OFF)兩種訊號,所以只能用

兩個數字值來表示。對電腦而言,開關是關的時候,以一個 0作表示;是開的時候,以

一個 1來作表示,而這種只有 "0"與 "1"兩種狀態的系統,稱為「二進位系統」(Binary

System)。

圖1-1 電腦最基本的儲存單位為「位元」

06307007.indd 1 2016/5/19 上午 09:12:54

Page 5: PREACE - OPENTECH

Visual C#2013無痛學習2

1-1 電腦儲存單位簡介

電腦中的資料是由數字所組成,甚至連文字、顏色也是由數字所組成。對電腦來說,

所有處理的資料都可視為是一個數字,是由 0或 1所組成的數字。當談論到電腦中的資

料時,無論是開或是關,由每個開關狀態所表示的值,稱為一個位元 (bit),一個位元就

可以表示兩種資料:0與 1。而兩個位元則可以表達四種資料,即 00、01、10、11,越

多的位元則表示可以處理更多的資料,不過因為電腦所處理的資料相當龐大,所以又將

八個位元組合成一個「位元組」(byte)。

有了位元組,電腦可以表示 256(28=256)個不同的符號或字元的其中一種,因為八

種足夠不同位元的組合來表示鍵盤上所有的字元,包括所有的字母(大寫字元和小寫字

元)、數字、標點符號和其他符號。事實上,當電腦操作者利用鍵盤輸入資料時,無論

是數字或字元資料,電腦都會將其轉換成二進位形式,並以二進位碼來儲存。

常用的電腦儲存單位有 KB(Kilo Byte)、MB(Mega Bytes)、GB(Giga Bytes)等等,

這些單位的換算關係如下:

1KB(Kilo Bytes)= 210Bytes= 1024Bytes

1MB(Mega Bytes)= 220 Bytes= 1024KB

1GB(Giga Bytes)= 230 Bytes= 1024MB

1TB(Tera Bytes)=240 Bytes= 1024GB

TIPSTIPS

1-2 程式語言簡介

「程式語言」是一種人類用來和電腦溝通的語言,也是用來指揮電腦運算或工作的

指令集合,可以將操作者的思考邏輯和語言轉換成電腦能夠了解的語言,也就是直接利

用 0與 1的二進位元模式機器語言來溝通。

程式語言發展的歷史已有半世紀之久,由最早期的機器語言發展至今,已經邁入到

第五代自然語言。每一代的語言都有其特色,並且一直朝著容易使用、除錯與維護功能

06307007.indd 2 2016/5/19 上午 09:12:55

Page 6: PREACE - OPENTECH

第 01章 程式設計的第一堂課 3

更強的目標來發展。基本上,不論任何一種語言都有其專有語法、特性、優點及相關應

用的領域。依照其演進過程分類如下:

圖1-2 程式語言的發展史

1-2-1 機器語言

機器語言 (Machine Language)是最早期的程式語言,由 1和 0兩種符號構成,也是

電腦能夠直接閱讀與執行的基礎語言,也就是任何程式在執行前都必須被轉換為機器語

言。例如「10111001」代表「設定變數 A」,而「00000010」代表「數值 2」。當指示

電腦將變數 A設定為數值 2時,機器語言寫法為:

10111001  (設定變數 A)00000010  (將 A設定為數值 2)

一段機器語言記錄了運作的種類及所要處理的資料之相關訊息。不同的機器碼會引

起計算機上不同電路產生動作,例如:加法的機器碼會引起加法器產生動作。不過每一

家電腦製造商,往往因為電腦硬體設計的不同而開發不同的機器語言。這樣不但使用不

方便,可讀性低也不容易維護,並且不同的機器平台,編碼方式都不盡相同。

1-2-2 組合語言

組合語言 (Assembly Language)指令比機器碼指令有意義多了,但與機器語言仍然成

一對一的對應,所以與機器語言一樣被歸類為低階語言。用組合語言所寫的程式,事實

上也是很接近 CPU所能認識的格式,只是它在撰寫上比機器語言來的容易多了。假設

01100000B(C0H)是機器語言中,用來告訴 CPU將 AX暫存器的值,放到記憶體堆疊的

指令,若以組合語言來寫,則是用 PUSH AX來表示。

由以下範例可以很清楚的看到,組合語言是用較接近口語的方式來表達機器語言的

一些指令。只要看到上述的指令,就大致能瞭解它是要將 AX暫存器存到堆疊裡,這遠

06307007.indd 3 2016/5/19 上午 09:12:55

Page 7: PREACE - OPENTECH

第 01章 程式設計的第一堂課 9

例如在現實生活中充滿了各種形形色色的物體,每個物體都可視為一種物件。我們

可以透過物件的外部行為 (behavior)運作及內部狀態 (state)模式,來進行詳細地描述。行

為代表此物件對外所顯示出來的運作方法,狀態則代表物件內部各種特徵的目前狀況。

如下圖所示:

圖1-4 物件的內部狀態與外部行為

如果要使用程式語言方式,來描述一個物件,就必須進行所謂的抽象化動作

(abstraction)。也就是利用程式碼來記錄此物件的屬性、方法與事件。分別說明如下:

表1-2 物件的屬性、方法與事件

名稱 特 色 與 說 明

屬性

屬性 (attribute) 是指物件的靜態外觀描述,例如一輛車子的顏色、大小等。或是對抽象的內在,如車子引擎的馬力、排氣數等,作為描述的動作,就如同於 JAVA程式中的類別成員資料 (member data)。

方法方法 (method)是指物件中的動態回應方式,例如車子可以開動、停止。就是一種行為模式,是用來代表一個物件的功能,也就是 JAVA中的類別成員方法 (member method)。

事件

事件 (event)是指物件可以針對外部事件做出各種反應,譬如車子沒油時,引擎就會停止,當然物件也可以主動地發出事件訊息。例如 JAVA程式中的視窗元件,就可以對事件做出反應與處理。

另外物件導向程式設計還具備以下三種特性:

(Encapsulation) (Inheritance) (Polymorphism)

圖1-5 物件導向程式設計的特性

06307007.indd 9 2016/5/19 上午 09:12:57

Page 8: PREACE - OPENTECH

Visual C#2013無痛學習68

� Parse轉換

強制型別轉換時,還可以利用 Parse()方法指定欲轉換的資料型別,語法如下。

數值變數 = 資料型別 .Parse(字串 );

4 資料型別是指欲轉換的數值資料型別。

在控制台應用程式中,以 ReadLine()方法讀進的資料是字串,透過 Parse()方法轉換

成指定的數值型別,才能進行後續的運算,簡例如下。

area = float.Parse(Console.ReadLine());

4 ReadLine()方法讀取字串後,再以 Parse()方法轉換 float型別,再指定給 area變數,

進行下一個敘述。

01 using System;02 using System.Collections.Generic;03 using System.Linq;04 using System.Text;05 using System.Threading.Tasks;06 07 namespace 型別轉換08 {09 class Program10 {11 static void Main(string[] args)12 {13 const double pi = 3.14159D;//常數14 Console.Write("請輸入半徑 (單位為公尺 ):");15 //讀取半徑,再以 Parse轉為 int16 int radius = int.Parse(Console.ReadLine());17 Console.WriteLine("圓面積是 {0}平方公尺 ", pi * radius * radius);18 Console.Read();19 }20 }21 }

【範例】 型別轉換.sln

06307007.indd 68 2016/5/19 上午 09:13:21

Page 9: PREACE - OPENTECH

Visual C#2013無痛學習88

本章習題園地

一、填充題

1.     對編譯器有特殊意義而預先定義的保留識別項,所以無法作為

識別字名稱,又稱保留字。

2. 在 C#中使用常數時,要加入關鍵字    ,宣告常數的同時要給予初

值。

3. decimal提供了數字的最大有效位數,能支援    個有效位數。

4. 物件資料型態在 C#中以    表示,佔有 4個位元組的記憶體長度,

可以用來儲存各種類型的資料型態。

5.     型別提供相關常數的組合。

6. 運算式是由    與    所組成。

7. 一些特殊的字元無法利用鍵盤來輸入或顯示於螢幕,這時候必須在字元

前加上    。

8. 如果要一次宣告多個同資料型態的變數,可以利用    隔開變數名

稱即可。

9. 宣告變數的同時可以利用    運算子同時指定變數的初值。

10. 使用貨幣數值時,需於數字最後加上    或    以茲區別。

二、問答與實作題

1. 常數與變數有何不同?

2. C#強型別 (Strongly Typed) 語言,它有何特性?

3. 簡述變數命名的限制?

4. 使用變數時要有那些基本屬性?

5. 請各位列舉使用常數的三項優點。

6. 浮點數型態可以分為哪兩種類別?

7. 何謂關鍵字,試簡單說明之。

06307007.indd 88 2016/5/19 上午 09:13:23

Page 10: PREACE - OPENTECH

第 03章 資料處理概說 89

本章習題園地

8. 請問「靜態儲存配置」(static storage allocation) 的程式語言的主要特點。

9. C#中有哪兩種資料型別?

10. 試寫出字串的宣告格式。

11. 什麼是結構資料型態?

12. 什麼是列舉 enum資料型態?

13. 型別轉換可以分成哪兩種?

14. 請舉例說明位元移動運算子的功用?

15. 試簡述運算子的優先順序的採用原則。

16. 什麼是跳脫控制字元?

17. 請以建立下圖的輸出外觀。

圖3-23

18. 請輸出如下圖所示的運算結果。

圖3-24

06307007.indd 89 2016/5/19 上午 09:13:23

Page 11: PREACE - OPENTECH

Visual C#2013無痛學習90

本章習題園地

19. 請輸出您的電腦目前的時間。

圖3-25

20. 請將三個字串變數串接,建立如下圖的輸出外觀。

圖3-26

06307007.indd 90 2016/5/19 上午 09:13:24