第一章 - 喵喵喵工作室

Download Report

Transcript 第一章 - 喵喵喵工作室

視窗程式設計
Class 1
教師:黃聖方
第一章
.NET Framework 介紹
.NET
.NET 在分散式系統支援
上,強調使用 XML 做為傳
輸的標準資料格式,並且使
用Internet上標準的HTTP與
SOAP (Simple Object
Access Protocol) 通訊協定
來傳輸 XML 資料 ,因此幾
乎所有可以連上Internet的
系統都支援,十分適合用在
異質系統的整合上。
3
1-4
.NET Framework
Visual
Basic
C#
C++
J#
…
Common Language Specification
(共通語言規格)
Windows Form
ADO .NET 、 XML
(傳統資料庫與XML文件存取)
Visual Studio .NET
.NET Framework
ASP .NET
Web Form、Web Service、
Mobile Web Form)
Base Class Library
(基礎類別程式庫)
Common Language Runtime
(共通語言執行時期環境)
.NET Framework架構圖
4
.NET Framework (續)
一.
共通語言執行時期環境
1.
2.
3.
4.
5.
6.
7.
8.
組件 (Assembly)
JIT編譯器 (Just-In-Time Compiler)
Native Code Manager
垃圾收集 (Garbage Collection)
例外管理員 (Exception Manager)
執行緒支援 (Thread Support)
COM元件整合 (COM Interop)
偵錯引擎 (Debug Engine)
5
public static void Main(String[] args )
{ String usr; FileStream f; StreamWriter w;
try {
usr=Environment.GetEnvironmentVariable("USERNAME");
f=new FileStream(“C:\\test.txt",FileMode.Create);
w=new StreamWriter(f);
w.WriteLine(usr);
w.Close();
} catch (Exception e){
Console.WriteLine("Exception:"+e.ToString());
}
}
Intermediate Language Compiler
(中間碼編譯器)
程式原始碼
Class Library
(類別程式庫)
Assembly Loader
(組件載入器)
+ +
Just-In-Time Compiler
(即時編譯器)
Class Loader
(類別載入器)
Native Code Cache
(機器碼快取)
+
組件
(Assembly、IL)
Metadata
Resources
Security
(安全性檢查)
Policy
Policy
+
機器碼
(Native Code)
<?xml version="1.0"
encoding="utf-8" ?>
<configuration>
<mscorlib>
<security> <?xml version="1.0"
encoding="utf-8" ?>
<policy>
<configuration>
<PolicyLevel
<mscorlib>
version="1">
<CodeGroup<security>
<policy>
class="UnionCodeGroup
<PolicyLevel
"
version="1">
<CodeGroup
version="1"
class="UnionCodeGroup
"
PermissionSetName="N
othing"
version="1"
Name="All_Code"
PermissionSetName="N
othing"
Description="Code
group
Name="All_Code"
grants no permissio
ns and forms the root of
Description="Code
the code group tree.">
group
grants no permissio
<IMembershipCondition
ns and forms the root of
clas
the code group tree.">
s="AllMembershipCondit
ion"
<IMembershipCondition
clas
version="1"/>
s="AllMembershipCondit
<CodeGroup
ion"
class="UnionCodeGroup
"
version="1"/>
<CodeGroup
version="1"
class="UnionCodeGroup
"
PermissionSetName="F
ullTrust"
version="1"
PermissionSetName="F
ullTrust"
Garbage Collection
(垃圾收集)
Native Code Manager
(程式管理員)
執行
共
通
語
言
執
行
時
期
環
境
圖
Exception Manager
(例外管理員)
Thread Support
(執行緒支援)
COM Interop
(COM元件整合)
Debug Engine
(偵錯引擎)
6
基礎類別程式庫

過去在不同程式語言中除了語言本身的語法差
異之外,程式語言所引用的程式庫也大不相同


例如Visual C++中的 MFC (Microsoft Foundation
Class Library)、ATL (Active Template Library),Java
中的AWT (Abstract Window Toolkit)、JFC (Java
Foundation Classes)…等
因此在 .NET Framework中為了達到不同語言
在程式庫上的統一,定義了「基底類別程式庫
(Base Class Library)」
7
Windows Form與Web Form

.NET依舊支援開發Windows應用程式,以往在Visual
Basic中經常使用到的ActiveX控制項,現在由基底
類別程式庫中的System.Windows.Forms名稱空間下的
類別所取代 。
新一代的Web應用程式開發使用ASP .NET技
術,除了延續ASP容易使用的特點之外,這次更將
程式碼與介面設計 (HTML) 分開,並使用類似
Windows Form的開發方式來開發Web應用程式。
8
共通的語言規格
在 .NET Framework中定義了一個共通的語言規格
(Common Language Specification, CLS),包含了函式呼
叫方式、參數傳遞方式、資料型態、例外處理方式等,
只要符合這個規格的程式語言,就可以彼此共存共榮。
這些資料型別全部定義在System這個名稱空間之下,如
下表:

ArgIterator
Boolean
Byte
Char
DateTime
Decimal
Double
Enum
Guid
Int16
Int32
Int64
IntPtr
SByte
Single
TimeSpan
TypedReference
UInt16
UInt32
UInt64
UIntPtr
Void
RuntimeMethodHandle
RuntimeArgumentHandle
RuntimeFieldHandle
RuntimeTypeHandle
9
C#語言

程式語言
在 .NET中支援多種程式語言,單就 .NET Framework中就預設至少
支援Visual Basic .NET與C# (# 讀做 sharp) 兩個程式語言。
C#則是專門針對在 .NET Framework上開發應用程式所設計的新
程式語言,擁有完整的物件導向支援,在程式語法的執行效率上也
比Visual Basic .NET快一點。

C#的類別宣告與物件使用像Java;語法則與C++雷同。
10
跨平台

由於 .NET上的組件在第一次執行時必須經
過CLR的編譯後才能真正交由CPU執行,因
此如果將CLR、或者說整個 .NET
Framework移植到其他作業平台上,例如
Linux、Macintosh,那麼我們所撰寫出來的
組件就可以直接拷貝到其它支援 .NET
Framework的作業平台上去執行,達到和
Java一樣跨平台的特色,但是執行效能卻更
高,這點也是微軟接下來的目標,可以想見
的未來。
11
第二章
C# .NET 程式架構與資料型別
C# .NET程式架構
一.
命名空間的宣告與完整名稱的存取方法
C#程式可以由一個或多個檔案組成。每個檔案可以包含一個
或多個命名空間(namespace)。
13
C# .NET程式架構(續)
二.
C#程式的基本架構
1.
使用using指示詞
2.
宣告命名空間範圍
3.
註解
4.
定義類別名稱
5.
Main()方法程式
的進入點
6.
[STAThread]
7.
WriteLine方法
14
C# .NET資料型別(續)
二.
變數(Variable)
當執行到下面的敘述時,電腦會自動在記憶體中配置該資料型別
的大小的空間來存放該變數值:
1.
2.
int myVar; //宣告myVar是一個整數變數,並在記憶體配置空
間存放該值。
int myVar=20;
//宣告myVar是一個整數變數,在記憶
體配置空間,並將20存入此指定的記憶體中。
15
C# .NET資料型別(續)
三.
實值型別變數與參考型別變數
由於C#對資料存放的方式的不同,將資料型別分成資料型別
(Value Type)和參考型別(Reference Type)兩大類。其說明如下:
1.
實值型別(Value Type)變數
實值型別變數裡面所存放的是資料自己本身,在C# 實值型
別變數包括:整數、布林、字元、浮點數、貨幣、結構、列舉等
變數。
2.
參考型別(Reference Type)變數
參考型別變數(或稱物件變數),此變數裡面所存放的是資料
的參考(指資料的位址),並非資料本身。在C# 中參考型別變數
都是屬於物件型別,如:陣列、類別、字串等都是屬於此種型別
變數 。
16
C# .NET資料型別(續)
【範例1】 以cs_value.sln範例來說明實質型別變數在Stack中配置的情形。
實質型別(以struct為例)
StrcutBefore
assign
StrcutAfter
參考型別(以class為例)
ClassBefore
ClassAfter
17
C# .NET資料型別(續)
四.
C# 實值資料型別
18
C# .NET資料型別(續)
資料型別表格(續)
19
C# .NET資料型別(續)
五.
變數的宣告和初始化
1. 變數宣告
在C# 的程式中是不允許使用未初始化過的變數運算。所
以,程式中若需要使用到某個變數,必須先宣告該變數是屬
於何種資料型別,一直到賦予該變數初值後,才可以使用該
變數。
變數宣告及初值設定的方式如下:
20
C# .NET資料型別(續)
2.
變數初始化
若您使用new運算子來宣告myInt整數
變數,它會呼叫int的預設建構函式
(Default Constructor),並賦予0當作myInt
整數變數的初值,例如:
int myInt=new int();
此敘述相當於下面敘述:
資料型別
.NET FrameWork
bool布林
System.Boolean
byte位元組
System.Byte
sbyte
System.Sbyte
int整數
System.Int32
uint無號整數
System.Uint32
short短整數
System.Int16
long長整數
System.Int64
ulong無號長整數
System.Uint64
int myInt=0;
右表即使用new運算子來初始化各資料型別
的初值:
預設值
false
0
0
0
0
0
0L
0
21
C# .NET資料型別(續)
六.
字串資料型別
1. 字串型別變數宣告及初值設定:
2. 字串型別的運算子
22
基本輸出入使用Console類別
一.
Write/WriteLine方法
Write()和WriteLine()都是System.Console所提供的方法,兩者
主要用來將輸出的串流(Output Stream)由指定的輸出裝置(預設為
螢幕)顯示出來。
二.
Read/ReadLine方法
Read()和ReadLine()方法都是System.Console類別所提供的。主
要用來由指定輸入裝置(預設為鍵盤)將鍵入的資料讀進來形成一個
輸入串流(Input Stream)放入指定的變數,以方便電腦處理。
23
WriteLine與ReadLine
輸出:Write或WriteLine


差別:Writeline會換行,Write不會
格式化輸出:
 Console.Write(“姓名: {0}”, Name);

{}內的數字代表要印出後面第幾個變數
輸入:Read或ReadLine



差別:Read一次讀一個字元;ReadLine讀一行
ReadLine沒有參數,回傳型態為字串
利用其他型別的Parse方法將輸入轉成所需的型態
 例:


Int32.Parse(Console.Read());
Float.Parse(Console.Read());
24
基本輸出入使用Console類別(續)
三.
四.
如何在主控制台應用程式模式下編寫程式
輸出資料如何格式化
C#.NET提供格式化符號字元,譬如:只要將原來的{0}改為
{0:D9},表示將第一個資料以十進制顯示且長度設為9,空白處補0,
便可讓上下文的資料對齊。各格式化字元的詳細說明如下表。
25
基本輸出入使用Console類別(續)
格式化字元表格(續)
26
基本輸出入使用Console類別(續)
五.
自訂數值格式輸出字串
當您希望所輸出的數值資料能夠上下對齊,就必須使用下表
所提供 的自訂格式輸出字元,將數值資料轉換成字串輸出便能
達成:
27
基本輸出入使用Console類別(續)
自訂格式表格(續)
28
基本輸出入使用Console類別(續)
六.
Escape sequence控制字元
和C++、Java一樣,C#字
串能允許在程式中使用一些無
法顯現列印的字元,或者在
C#程式中已有定義其功能的
單引號、雙引號、倒斜線(\),
若欲在程式中使用到這些字元,
可以在該字元的前面加上一個
倒斜線,我們稱之為「逸出序
列」(Escape Sequence)。
逸出序列
說明
\’
插入一個單引號
\”
插入一個雙引號
\\
插入一個倒斜線,當程式定義檔案路徑時有用
\a
觸發一個系統的警告聲
\b (Backspace)
退一格
\f (Form Feed)
跳頁
\n (New line)
換新行
\r (Return)
游標移到目前該行的最前面。
\t (Tab)
插入水平跳格到字串中
\udddd
插入一個Unicode字元
\v
插入垂直跳格到字串中
\0 (Null space)
代表一個空字元
29
陣列
C# 建立陣列的方式有兩種:
【第一種】
【第二種】
30
結構資料型別
C#.NET提供一種使用者自定型別(User Defined Type)稱為結構
(struct)或記錄(Record),它允許將不同資料型別的資料放在一起構成一
筆記錄,不像陣列必須分成多個陣列來存放該筆資料。定義結構資料型
別的語法如下:
31
結構資料型別(續)
【範例】定義一個名稱為PC的結構,該結構含有品名(item_Name)、
單價(price)和數量(qty)三個欄位:
1. using System;
2. namespace cs_struct
3. {
4. class Class1
5. {
6.
struct pc
7.
{
8.
public string item_Name;
9.
public int price ;
10.
public int qty ;
11.
}
13.
[STAThread]
14.
static void Main(string[] args)
15.
{
16.
pc[] acer = new pc[3];
17.
int k ;
18.
for (k = 1;k < 3;k++)
19.
{
20.
Console.WriteLine("第 " + k + " 筆資料");
32
結構資料型別(續)
【範例】
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39. }
40. }
Console.Write("品名 : ");
acer[k].item_Name = Console.ReadLine();
Console.Write("單價 : ");
acer[k].price = Int32.Parse(Console.ReadLine());
Console.Write("數量 : ");
acer[k].qty = Int32.Parse(Console.ReadLine());
Console.WriteLine();
}
}
for (k = 1;k < 3;k++)
{
Console.WriteLine("顯示第 " + k + " 筆資料 ... ");
Console.WriteLine(acer[k].item_Name);
Console.WriteLine(acer[k].price);
Console.WriteLine(acer[k].qty);
Console.WriteLine();
}
Console.ReadLine();
33
2-7
結構資料型別(續)
【結果】
34
類別
類別(class)就是結構(struct)的延伸,結構只有資料成員(或稱欄位),
至於類別除具有資料成員外,另外加上函式成員(亦稱方法),「資料成
員」是用來描述物件的屬性,「函式成員」是用來產生物件的方法,為
保有物件的封裝的特性必須透過物件所提供的方法才能存取物件的屬性。
下表為定義person類別 :
1 class person
2 {
//欄位
3 string name;
4
//Default Constructor (預設建構函式)
5 public person() {… }
6
//Constructor (建構函式)
7 public person(string name,int height,int weight,string birthdate) {… }
8
//displaying method
9 public void display() {… }
10 }
35
資料型別轉換
一.
隱含轉換 (Implicit Conversion)
二.
明確轉換 (Explicit Conversion)
36
第三章
流程控制
選擇結構與重複結構
除少部分新增功能之外,基本上此部分與C++一模一
樣,熟習C++語法者可以直接採C++之語法來撰寫
foreach敘述
38
3-2
重複結構(續)
【 foreach _範例 】
//FileName:cs_foreach1.sln
1. using System;
2. namespace cs_foreach1
3. {
4.
class Class1
5.
{
6.
[STAThread]
7.
static void Main(string[] args)
8.
{
9.
int count=1;
10.
//宣告並建立陣列的初值
11.
string[] myArray=new string[3] {"Lung", "Tom", "Jane"};
12.
foreach(string k in myArray)
13.
Console.WriteLine ("第{0}個陣列元素:{1}", count++, k);
14.
Console.Read();
39
3-2
重複結構(續)
【 foreach_範例 】
15.
16.
17. }
}
}
【結果】
40
重複結構

break敘述

continue敘述
41
摘要
.NET Framework定義相同的基本的類別庫,使不同的
語言都可以相同的方式取用物件。
C#語法概要

完全的物件導向
 類別必須定義在獨立的命名空間中。

變數分成實質和參考兩種
 一經宣告就必須要給初始值(或呼叫new)
運算子、選擇與重複結構語法與C++雷同。
C#中的結構可和類別一樣宣告成員函式,定義private
變數,差別在結構是實質型別,類別是參考型別。

42