1
ASP.NET 網頁設計入門(使用 C#)
講師︰唐士軒
CSIE NTU
Outline
z
類别與物件
z欄位與屬性 z方法z靜態成員 z方法多載 z建構式
命名空間 (1)
z 使用命名空間的好處可以將功能類似的類別組 織在一起
z 命名空間允許巢狀的結構,形成階層式的架 構,更容易分類管理
z 若在同一個程式檔中宣告二個名稱一樣的類別 時,編譯會發生錯誤,我們可以利用命名空間 來解決此問題
z 利用 using 關鍵字來指定需要的命名空間 z 語法
namespace 命名空間名稱
{
類別;
}
命名空間 (2)
z 用法
namespace IBM
{
class Notebook
{ } }
namespace Compaq
{
class Notebook
{ }
類别
z類別主要的功能是用來描述定義物件的 模樣
z類別主要包含下列成員
z欄位 (field)
z屬性 (property)
z方法 (method)
z事件 (event)
類別實例
z 我們可以建立一個用來描述『一台車子』的類 別
z 在該類別中,可以建立有關車子的欄位資料,
像是車牌號碼、排氣量…
z 接著設定該類別的屬性,讓使用者可以藉由屬 性存取類別中的欄位資料
z 一台車子的功能包含前進、後退、換車牌、顯 示目前油量等,可定義於類別方法中
z 該類別的可能事件有警報聲響起,發生碰撞,
車門被開啟…
定義類別
z 語法
存取修飾詞 class 類別名稱
{
類別成員;
}
z 用法
public class car
{
string id;
}
z 類別存取修飾詞
z public – 不同組件也可以被引用
z internal – 用一個組件才可以被引用 (預設)
物件
z 我們可以把類別想像成是車子架構的設計圖,
而物件就是根據車子架構設計圖所設計出來的 車子
z 類別的使用需產生該類別的實體物件,我們可 以透過 new 關鍵字來完成
z 語法
z 類別名稱 物件名稱 = new 類別名稱();
z 用法
z car myCar = new car();
z car myCar;
myCar = new car();
實例探討 sample4-a1 (1)
z程式功能
z定義一個 car 類別
z在主程式中產生 car 實體物件
實例探討 sample4-a1 (2)
z 程式內容
namespace sample5_a2
{
class Class1
{
static void Main(string[] args)
{
car c = new car();
} }
class car
{ } }
Outline
z類别與物件 z
欄位與屬性
z方法z靜態成員 z方法多載 z建構式
成員存取修飾詞
z public
z 任何外部類別都可不受限制存取此類別成員
z private
z 此類別成員只能在此類別中使用
z protected
z 此類別成員可在此類別及繼承此類別的子類別使用
z internal
z 在同一個組件中都可存取此類別成員
z protected internal
z 提供 protected 及 internal 二種存取方式
欄位成員
z 欄位為類別中所定義的各種資料型別變數
z 當我們產生實體物件後,可透過 "." 來存取欄 位資料
z ex︰myCar.id
z 語法
z 存取修飾詞 資料型別 欄位名稱;
z 用法
z private string id;
z public int num;
實例探討 sample4-a2 (1)
z 程式功能
z 建立 car 類別
z 在 car 類別中定義 id 欄位 z 設定並列印出 id 欄位的值
z 程式內容
class car {
public string idField; //類別欄位 (field) }
實例探討 sample4-a2 (2)
z 程式內容
static void Main(string[] args) {
//產生實體物件 car c = new car();
//設定並列印結果
c.idField = "ABC-123";
Console.WriteLine("車牌號碼︰" + c.idField);
}
屬性成員 (1)
z 屬性用來存取類別的欄位值
z 實體物件一樣可透過 "." 來存取屬性資料 z 語法
存取修飾詞 資料型別 屬性名稱
{
get
{
return 欄位名稱;
}
set
{
欄位名稱 = value;
屬性成員 (2)
z 用法
public string id {
get {
return idField;
} set {
idField = value;
} }
z 說明
z 我們可以只設定 get 部份讓該屬性成唯讀屬性
欄位與屬性成員
z利用將欄位成員設定成 public,讓實體物 件可以直接存取的方法雖然簡單,但卻 無法提供任何額外的控制
zex︰speed 欄位只能介於 1 ~ 100 之間
z較好的設計方式為將欄位設定成
private,讓實體物件透過屬性成員來存取 欄位成員的值
z我們可以在定義屬性成員時,加入存取 方式的控制
實例探討 sample4-a3 (1)
z程式功能
z建立 car 類別
z在 car 類別中定義 speed 欄位、speed 屬性 z speed 屬性值介於 0 ~ 100 間
z程式內容
class car {
private int speedField; //類別欄位 (field)
實例探討 sample4-a3 (2)
z 程式內容
public int speed
{
get
{
return speedField;
}
set
{
if(value < 0) value = 0;
else if(value >100) value = 100;
speedField = value;
}
實例探討 sample4-a3 (3)
z程式內容
static void Main(string[] args) {
car myCar = new car();
myCar.speed = -200;
Console.WriteLine("目前車速︰" +
myCar.speed);
}
課堂練習 sample4-b1 (1)
z類別功能
z建立 empolyee 類別
z類別中含有 baseSalary、salary 及 benefit 屬 性
zbaseSalary 屬性必須大於等於 0
zsalary 為唯讀屬性,其值為 baseSalary 加上 benefit
z程式功能
z主程式中請使用者輸入底薪及獎金值
z列印出類別 salary 屬性值
課堂練習 sample4-b1 (2)
z基本概念
z在 baseSalary 屬性定義中判斷使用者輸入的 資料是否正確
z在 salary 屬性定義中,不設定 set ,並且 get
回傳值為 baseSalary 加上 benefit
Outline
z類别與物件 z欄位與屬性 z
方法
z靜態成員 z方法多載 z建構式
方法成員 (1)
z方法是用來定義類別提供的特定功能
z實體物件可透過 "." 來呼叫方法成員,但 在方法成員名稱後需加上 () 來說明傳入 的參數值
z語法
存取修飾詞 回傳值 方法名稱 (傳入參數) {
方法內容程式區塊;
}
方法成員 (2)
z用法
public void hello() {
Console.WriteLine("您好");
}
z說明
zvoid 表示沒有回傳值
z() 內為空白時,表示不需要傳作參數
實例探討 sample4-a4 (1)
z 程式功能
z 建立 car 類別
z 在 car 類別中定義 id 屬性及 showId 方法
z 程式內容
class car {
private string idField; //類別欄位 (field)
public void showId() //類別方法 (method) {
Console.WriteLine("車牌號碼︰" + idField);
}
實例探討 sample4-a4 (2)
z程式內容
public string id //類別屬性 (property) {
get { return idField; } set { idField = value; } }
}
實例探討 sample4-a4 (3)
z程式內容
static void Main(string[] args) {
car myCar = new car();
myCar.id = "ABC-123";
myCar.showId();
Console.ReadLine();
}
參數傳遞與回傳值 (1)
z 類別的方法可以定義傳入的參數及回傳值,因 此我們可以把需要運算的參數傳給方法,在方 法中計算完畢後再回傳結果
z 語法
存取修飾詞 回傳值型別 方法名稱
(參數1型別 參數1名稱, 參數2型別 參數2名稱, …) {
方法內容程式區塊;
}
參數傳遞與回傳值 (2)
z用法
public int add(int a, int b) {
return a + b;
}
z說明
z利用 return 關鍵字來傳遞要回傳的值
z注意型別須一致
實例探討 sample4-a5 (1)
z 程式功能
z 建立 Caculator 類別
z 定義二數相加 add 方法
z 程式內容
class Caculator {
public int add(int a, int b) {
return a + b;
} }
實例探討 sample4-a5 (2)
z程式內容
static void Main(string[] args) {
Caculator myCaculator = new Caculator();
Console.WriteLine(myCaculator.add(10,20));
}
課堂練習 sample4-b2
z類別功能
z建立 graph 類別
z類別中含有 drawRectangle 方法,可傳入長 及寬二整數值,並繪出該矩形
z程式功能
z請使用者輸入長及寬
z呼叫該方法並將使用者輸入資料當為傳入參
數
Outline
z類别與物件 z欄位與屬性 z方法
z
靜態成員
z方法多載 z建構式靜態成員 (1)
z類別中的靜態成員不需要產生實體物件 即可直接存取引用
z靜態成員必須使用 static 關鍵字進行宣告 z引用靜態成員方式,直接使用類別名稱
再利用 "." 連接靜態成員名稱即可 zMain 就是一個靜態方法成員
靜態成員 (2)
z 語法
存取修飾詞 static 回傳值 方法名稱 (傳入參數) {
方法內容程式區塊;
}
z 用法
z static void Main(string[] args)
z 說明
z Main 方法為靜態成員,傳入值為一字串陣列,沒有 回傳值、存取限制為預設的 private
實例探討 sample4-a6 (1)
z 程式功能
z 建立 Caculator 類別
z 定義二數相加 add 靜態方法
z 程式內容
class Caculator {
public static int add(int a, int b) {
return a + b;
} }
實例探討 sample4-a6 (2)
z程式內容
static void Main(string[] args) {
//列印結果
Console.WriteLine(Caculator.add(10,20));
}
課堂練習 sample4-b3
z類別功能
z建立 console 類別
z類別中含有 query 靜態方法,可傳入一問 句,並回傳使用者所鍵入的值
z程式功能
z實際測試該類別
z基本概念
zquery 靜態方法可傳入一個 string 參數,在
方法中先列印該參數值至螢幕上,讀進使用
者輸入 的資料後,回傳其結果
Outline
z類别與物件 z欄位與屬性 z方法
z靜態成員 z
方法多載
z建構式方法多載
z方法多載允許我們將傳入參數不同的方 法,定義成相同的名稱
z當我們在定義二數相加的方法時,藉由 方法多載可讓我們不需定義二個不同名 稱的方法,以區隔為二個整數相加或二 個浮點數相加
實例探討 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;
}
實例探討 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));
}
課堂練習 sample4-b4
z類別功能
z定義 math 類別
z類別中含有 max 方法,能傳入二或三個整 數,並回傳其中最大的一個
z程式功能
z分別以二個參數及三個參數引用該方法 z列印回傳值
z基本概念
z利用方法多載
Outline
z重複結構流程控制 (四) z類别與物件
z欄位與屬性 z方法
z靜態成員 z方法多載 z
建構式
建構式 (1)
z建構式 (Constructor)
z建構式在類別實體物件建立前即會執行,用 來初始化物件
z建構式的名稱一定要和類別名稱一樣 z建構式與方法相同允許多載
z語法
存取修飾詞 類別名稱() {
}
建構式 (2)
z用法
public car() {
idField = "ABC-123";
}
public car(string id) {
idField = id;
}
實例探討 sample4-a8 (1)
z程式功能
z建立 Caculator 類別 z定義多載建構式
z利用建構式初始化物件
z程式內容
class car {
private string idField;
實例探討 sample4-a8 (2)
z程式內容
public car()
{
idField = "ABC-123";
}
public car(string id)
{
idField = id;
}
public void showId()
{
Console.WriteLine("車牌號碼︰" + idField);
}
實例探討 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();
}
課堂練習 sample4-b5
z 類別功能
z 建立 math 類別
z 類別中含有欄位值 x 及方法 square,該方法沒有傳 入,回傳值為橺位 x 的平方值
z x 的值在建構式中預設為 10
z 程式功能
z 請輸用者輸入一整數 z 列印該整數的平方值
z 當輸入 的數小於 0 時,列印預設值 10 的平方值
z 基本概念
z 在建構式中先初始化 x 的值
遞迴
z遞迴是一種本身呼叫自己的方法
z利用遞迴可以提供較為簡潔的方法進行 數學運算
z遞迴程式中,必須撰寫令遞迴結束執行 的程式碼
實例探討 sample4-a9 (1)
z程式功能
z利用遞迴進行整數和運算
z程式內容
private static int sum(int x) {
if(x==1) return 1;
else return x + sum(x-1);
}
實例探討 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));
}
課堂練習 sample4-b6
z類別功能
z在預設 Class1 類別中定義 factorial 靜態方法 zfactorial 靜態方法,可傳入一整數參數 x,
並回傳 x 的階層值
z程式功能
z請使用者輸入 x 的值 z呼叫 factorial 靜態方法 z列印出 x 的階層值
z基本概念
z利用遞迴來完成
進階練習 sample4-d1 (1)
z 程式功能
z 輸入年份及月份
z 列印出該年該月份的月曆
z 紅利
z 萬年曆 (自己判斷閏年)︰20 分 z 萬年曆 (使用類別)︰15 分
z 公式
z 逢四年閏一年 z 逢一百年不閏 z 逢四百年閏