《C#入門(mén)經(jīng)典教程》PPT課件.ppt_第1頁(yè)
《C#入門(mén)經(jīng)典教程》PPT課件.ppt_第2頁(yè)
《C#入門(mén)經(jīng)典教程》PPT課件.ppt_第3頁(yè)
《C#入門(mén)經(jīng)典教程》PPT課件.ppt_第4頁(yè)
《C#入門(mén)經(jīng)典教程》PPT課件.ppt_第5頁(yè)
已閱讀5頁(yè),還剩425頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第1章 C#與NET平臺(tái)介紹本章目標(biāo),了解.NET Framework 的結(jié)構(gòu) 理解.NET Framework 的基本概念 CLR JIT CTS MSIL 了解 .NET Framework 命名空間 了解C#程序的基本結(jié)構(gòu),1 C#語(yǔ)言的由來(lái),在過(guò)去的二十年里,C和C+已經(jīng)成為在商業(yè)軟件的開(kāi)發(fā)領(lǐng)域中使用最廣泛的語(yǔ)言。它們?yōu)槌绦騿T提供了十分靈活的操作,不過(guò)同時(shí)也犧牲了一定的開(kāi)發(fā)效率。與VB等語(yǔ)言相比,同等級(jí)別的C/C+應(yīng)用程序往往需要更長(zhǎng)時(shí)間來(lái)開(kāi)發(fā)。由于C/C+語(yǔ)言的復(fù)雜性,許多程序員都試圖尋找一種新的語(yǔ)言,希望能在功能與效率之間找到一個(gè)更為理想的權(quán)衡點(diǎn)。 VB以犧牲靈活性的代價(jià)來(lái)提高效率

2、??墒沁@些靈活性正是C/C+程序員所需要的。這些解決方案對(duì)編程人員的限制過(guò)多(如屏蔽一些底層代碼控制的機(jī)制),所提供的功能難以令人滿意。這些語(yǔ)言無(wú)法方便地同早先的系統(tǒng)交互,也無(wú)法很好地和當(dāng)前的網(wǎng)絡(luò)編程相結(jié)合。,對(duì)于C/C+用戶來(lái)說(shuō),最理想的解決方案無(wú)疑是在快速開(kāi)發(fā)的同時(shí)又可以調(diào)用底層平臺(tái)的所有功能。他們想要一種和最新的網(wǎng)絡(luò)標(biāo)準(zhǔn)保持同步并且能和已有的應(yīng)用程序良好整合的環(huán)境。另外,一些C/C+開(kāi)發(fā)人員還需要在必要的時(shí)候進(jìn)行一些底層的編程。 C# (C sharp) 是對(duì)這一問(wèn)題的解決方案。C#是一種新的、面向?qū)ο蟮木幊陶Z(yǔ)言。它使得程序員可以快速地編寫(xiě)各種基于Microsoft .NET平臺(tái)的應(yīng)用程

3、序,Microsoft .NET提供了一系列的工具和服務(wù)來(lái)最大程度地開(kāi)發(fā)利用計(jì)算與通訊領(lǐng)域。,C#語(yǔ)言的特點(diǎn): C#語(yǔ)言是Microsoft發(fā)布的一種全新的編程語(yǔ)言,是其.Net戰(zhàn)略的一枚重要棋子。 C#語(yǔ)言是面向?qū)ο蟮?、現(xiàn)代的編程語(yǔ)言,用C#編寫(xiě)的應(yīng)用程序可以充分利用.Net的框架體系帶來(lái)的優(yōu)點(diǎn).既可以用來(lái)編寫(xiě)基于通用網(wǎng)絡(luò)協(xié)議的Internet服務(wù)軟件,也可以編寫(xiě)各種數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)服務(wù)應(yīng)用程序和Windows窗口界面程序。 C#繼承了C/C+的優(yōu)點(diǎn)和靈活性,能夠充分利用OS系統(tǒng)的底層功能,同時(shí)又具備了完全的面向?qū)ο筇匦???梢宰尦鯇W(xué)者直接了解面向?qū)ο缶幊痰母鞣N概念,學(xué)習(xí)現(xiàn)代的編程思想和手段。,2

4、 .NET代碼的編譯語(yǔ)言特定的編譯器和運(yùn)行庫(kù),代碼 被執(zhí)行,IL + 元數(shù)據(jù),C L R,IL 和 CLR 的使用Intermediate LanguageCommon Language Runtime,編譯執(zhí)行 .NET 程序,Microsoft 中間語(yǔ)言,MSIL + 元數(shù)據(jù),機(jī)器 代碼,代碼 被執(zhí)行,CLR,MSIL,幫助語(yǔ)言實(shí)現(xiàn)互操作,IL 不是字節(jié)代碼,但很接近字節(jié)代碼。因此,執(zhí)行應(yīng)用程序時(shí),IL 到機(jī)器碼的轉(zhuǎn)換速度非???!,通過(guò) CLR將 MSIL 轉(zhuǎn)換為具體 CPU 的代碼,CPU 無(wú)關(guān)的指令集,語(yǔ)言 編譯器,.NET 源 代碼,程序集,client.exe,client.exe

5、,clientlib.dll,client.exe,module,IL語(yǔ)言范例,IL_0000: nop IL_0001: call IL_0006: nop IL_0007: ldc.i4.0 IL_0008: call IL_000d: nop IL_000e: ldnull IL_000f: ldftn IL_0015: newobj IL_001a: call IL_001f: nop IL_0020: newobj IL_0025: call IL_002a: nop IL_002b: newobj IL_0030: throw,通用語(yǔ)言運(yùn)行時(shí)CLR,.NET的語(yǔ)言互操作性: 不同語(yǔ)

6、言編寫(xiě)的代碼可互相調(diào)用 C#的平臺(tái)移植性: 框架 JIT編譯器(Just In Time, 即時(shí)編譯器),3 .NET Framework 簡(jiǎn)介,.NET Framework類(lèi)似于JVM .NET Framework 兩個(gè)主要組件: 通用語(yǔ)言運(yùn)行時(shí) (CLR) 統(tǒng)一的類(lèi)庫(kù)集 .NET的類(lèi)庫(kù): 線程 文件輸入/輸出 (I/O) 數(shù)據(jù)庫(kù)支持 XML 解析 數(shù)據(jù)結(jié)構(gòu),.NET Framework 的體系結(jié)構(gòu),Visual Studio .NET,CLR通用語(yǔ)言運(yùn)行時(shí) (CLR),Base Class Library: IO, Drawing, Threading,Data and XML,XML W

7、eb services,Windows Forms,Web Forms,通用語(yǔ)言規(guī)范(CLS),VB,C+,C#,JScript,操作系統(tǒng),.Net Framework 類(lèi)庫(kù) (FCL),CLS和CTS,通用語(yǔ)言規(guī)范 CLS Common Language Specification 規(guī)定所有 .NET 語(yǔ)言都應(yīng)遵循的規(guī)則 生成可與其他語(yǔ)言互操作的應(yīng)用程序 通用類(lèi)型系統(tǒng) (Common Type System, CTS) 包含標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型 包含準(zhǔn)則集,CLS、CTS 和 MSIL 緊密配合以實(shí)現(xiàn)語(yǔ)言互操作性,命名空間就像在文件系統(tǒng)中一個(gè)文件夾容納多個(gè)文件一樣,可以看作某些類(lèi)的一個(gè)容器。通過(guò)把類(lèi)

8、放入命名空間可以把相關(guān)的類(lèi)組織起來(lái),并且可以避免命名沖突。命名空間既用作程序的“內(nèi)部”組織系統(tǒng),也用作“外部”組織系統(tǒng)(一種向其他程序公開(kāi)自己擁有的程序元素的方法) 使用命名空間:using 類(lèi)似#include,4 命名空間,1.H class A ,2.H class A ,3.cpp #include “1.h” #include “2.h” .,3.cpp class A class A ,namespace a1 class A ,namespace a2 class A ,3.cs using a1; using a2; a1.A a2.A,常用命名空間,5 創(chuàng)建“Hello Wo

9、rld”應(yīng)用程序,單擊“開(kāi)始”“程序”“Microsoft Visual Studio .NET 2005”“Microsoft Visual Studio .NET 2005” 此時(shí)將打開(kāi) VS.NET 2005 的起始頁(yè) 要?jiǎng)?chuàng)建 C# 控制臺(tái)應(yīng)用程序,請(qǐng)從列表中選擇 “創(chuàng)建建”“項(xiàng)目”。此時(shí)將打開(kāi)“新建項(xiàng)目”窗口 選擇“Visual C# 項(xiàng)目”作為項(xiàng)目類(lèi)型,選擇“控制臺(tái)應(yīng)用程序”作為模板,C# 模板,Console.WriteLine(Hello World);,輸出,HelloWorld.csproj AssemblyInfo.cs Program.cs,“Hello World”應(yīng)用

10、程序文件,編譯和執(zhí)行 C# 應(yīng)用程序,要生成 C# 項(xiàng)目,請(qǐng)從菜單中選擇“生成” “生成解決方案” 該過(guò)程將編譯項(xiàng)目中包括的所有文件,編譯結(jié)果顯示在“輸出”窗口中 如果結(jié)果顯示“生成: 1 成功或最新,0失敗,0被跳過(guò)”,則說(shuō)明已經(jīng)成功生成,然后即可交付該應(yīng)用程序,要運(yùn)行剛才生成的應(yīng)用程序,請(qǐng)從菜單中選擇“調(diào)試”“開(kāi)始執(zhí)行(不調(diào)試)” 輸出結(jié)果顯示在 VS.NET 控制臺(tái)窗口中,C# 應(yīng)用程序文件夾結(jié)構(gòu),Visual Studio .NET 2005 創(chuàng)建一個(gè)與項(xiàng)目同名的文件夾,此處為“HelloWorld” 該文件夾包含項(xiàng)目文件“HelloWorld.csproj”和其他關(guān)聯(lián)文件 每個(gè)新項(xiàng)目

11、都創(chuàng)建了 bin、obj和Properties 三個(gè)文件夾。 Bin和obj這兩個(gè)文件夾下都有一個(gè) Debug 子目錄,其中包含可執(zhí)行文件 HelloWorld.exe 在“解決方案資源管理器”中啟用“顯示所有文件”選項(xiàng),可查看“HelloWorld”項(xiàng)目的結(jié)構(gòu),/這是用 C# 編寫(xiě)的一個(gè)簡(jiǎn)單的 HelloWorld 程序 using System; namespace Notepad class HelloWorld static void Main() Console.WriteLine(Hello World); ,聲明 HelloWorld 類(lèi),描述代碼的注釋,Hello World

12、程序,程序入口點(diǎn), Main 的返回類(lèi)型為 void,控制臺(tái)類(lèi)的 WriteLine() 方法用于顯示輸出結(jié)果,導(dǎo)入 System 命名空間,聲明命名空間 Notepad,將文件保存為 *.cs,說(shuō)明: 1.程序一般包括以下幾部分: 名稱(chēng)空間的引用:使用using關(guān)鍵字指明引用的名稱(chēng)空間。 名稱(chēng)空間的聲明:使用namespace關(guān)鍵字聲明名稱(chēng)空間。 類(lèi):使用class關(guān)鍵字聲明類(lèi)。 Main方法:Main方法是C# 程序的入口。 2.類(lèi)中包含了程序所要用到的數(shù)據(jù)和所要執(zhí)行的方法的定義。每個(gè)類(lèi)中可以有: (1)變量聲明 (2)構(gòu)造函數(shù) (3)方法 (4)屬性 (5)事件 3.一個(gè)文件中可以有1個(gè)

13、或者多個(gè)類(lèi)。 4. 所有語(yǔ)句都以分號(hào);結(jié)束。,C#語(yǔ)言基礎(chǔ),第2章,目標(biāo),在C#中定義變量和常量 使用C#中的基本數(shù)據(jù)類(lèi)型 理解裝箱和拆箱的概念 使用C#中的運(yùn)算符,選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu) 定義和使用數(shù)組,了解結(jié)構(gòu)和枚舉 了解C#中的預(yù)處理指令 理解C#中常用的字符串處理方法,第一個(gè) C#程序 :HelloWorld,using System; class HelloWorld static void Main( ) Console.WriteLine(“Hello, World!”); ,HelloWorld.cs,第一個(gè) C#程序 :HelloWorld,1: using System;,第

14、1 行:,using 關(guān)鍵字 用來(lái)引用.NET框架類(lèi)庫(kù)中的資源 通常在程序文件的開(kāi)頭使用 如果程序中需要多種資源,可以使用多次using System 命名空間 System命名空間提供了構(gòu)建應(yīng)用程序所需的系統(tǒng)統(tǒng)能的訪問(wèn),第一個(gè) C# 程序 :HelloWorld,2: class HelloWorld 3: . 8: ,第 2,3,8 行:,類(lèi) 在C#或其他面向?qū)ο笳Z(yǔ)言中,需要編寫(xiě)類(lèi) 使用關(guān)鍵字class定義一個(gè)類(lèi),類(lèi)的內(nèi)容放在一對(duì) 中 示例中定義了一個(gè)名為HelloWorld的類(lèi),第一個(gè) C# 程序 :HelloWorld,4: static void Main( ) 5: . 7: ,第

15、 4,5,7 行:,Main 方法 Main 方法是應(yīng)用程序的入口點(diǎn),編譯器將由該處開(kāi)始執(zhí)行程序 方法體也放在一對(duì) 中 每個(gè)C#的應(yīng)用程序都必須包含Main方法,4: static void Main( ) 5: . 7: ,第 4,5,7 行:,Main方法 static表示Main方法是一個(gè)全局方法 void表示Main方法沒(méi)有任何返回值,即返回值是空 參數(shù)放在小括號(hào)中定義。此處括號(hào)內(nèi)沒(méi)有內(nèi)容,表明Main方法沒(méi)有任何參數(shù),第一個(gè) C# 程序 :HelloWorld,6: Console.WriteLine(“Hello, World!”);,第 6 行:,語(yǔ)句 在C#中要執(zhí)行的指令 語(yǔ)句

16、之間用;分隔,編譯器通過(guò)分號(hào)來(lái)區(qū)分多個(gè)語(yǔ)句 使用大括號(hào) 標(biāo)識(shí)某個(gè)代碼塊的開(kāi)始和結(jié)束,從而可以對(duì)語(yǔ)句進(jìn)行組合。大括號(hào)必須成對(duì)匹配。,第一個(gè) C# 程序 :HelloWorld,6: Console.WriteLine(“Hello, World!”);,第 6 行:,語(yǔ)句 HelloWorld程序的主要目的就是在屏幕上顯示一條問(wèn)候 WriteLine方法用來(lái)將問(wèn)候語(yǔ)寫(xiě)到標(biāo)準(zhǔn)輸出設(shè)備上。 Console代表標(biāo)準(zhǔn)輸出設(shè)備- 屏幕,它屬于System命名空間 WriteLine方法是Console類(lèi)的方法。訪問(wèn)類(lèi)或?qū)ο蟮姆椒ㄊ褂?點(diǎn)取符.來(lái)完成。 字符串用雙引號(hào)“ ”表示 字符串“Hello,Worl

17、d”是WriteLine方法的參數(shù),表示屏幕輸出 的內(nèi)容,第一個(gè) C# 程序 :HelloWorld,系統(tǒng)預(yù)定義類(lèi)型,系統(tǒng)預(yù)定義類(lèi)型,字面量,int: int iMax = int.MaxValue; int pVal = int.Parse(“100”); short i16 = 50; int i32 = i16; i16 = i32; 錯(cuò)誤 i16 = (short)i32; decimal decimal iRate = 3.9834M; iRate = decimal.Round(iRate, 2); /四舍五入 iRate = decimal.Remainder(512.0M, 5

18、1.0M);,bool bool bt = (bool)1; /錯(cuò)誤 char string pattern = “123abcd?”; bool bt; bt = char.IsLetter(pattern, 3); bt = char.IsNumber(pattern, 3); bt = char.IsLower(pattern, 3); bt = char.IsPunctuation(pattern, 7); bt = char.IsLetterOrDigit(pattern, 3);,single,double float f = 24567.66f; double d = 124.4

19、5; If(Single.IsNaN(1/0) 使用Parse轉(zhuǎn)換數(shù)字字符串 short shParse = Int16.Parse(100); int iParse = Int32.Parse(100); long shParse = Int64.Parse(100); decimal dParse=decimal.Parse(“99.99); float sParse=float.Parse(“99.99); double dParse=double.Parse(“99.99);,字符串,字符串直接量 string path; path = ”C:note.txt”; path = “C:

20、note.txt”; 字符串操作 索引字符串中的單個(gè)字符 string str = “abcd”; char c = str0; 字符串連接 string s1 = “My age = “; int myAge = 28; string cat = s1 + myAge;,字符串操作 抽取和定位子串 string poem = “In Xanadu did Kubla Khan”; string poemSeg = poem.Substring(10); poemSeg = poem.Substring(0,9); int index = poem.IndexOf(“I”); index =

21、poem.LastIndexOf(“n”); 比較字符串 bool isMatch; string title = Ancient Mariner; isMatch = (title = ANCIENT AMRINER); isMatch = (title.ToUpper() = ANCIENT MARINER); isMatch = title.Equals(Ancient Mariner);,String常用方法,C# 中常用的字符串處理方法: Equals() :比較兩個(gè)字符串的值是否相等 ToLower():將字符串轉(zhuǎn)換成小寫(xiě)形式 IndexOf():查找某個(gè)字符在字符串中的位置 Su

22、bString():從字符串中截取子字符串 Join():連接字符串 Split():分割字符串 Trim():去掉字符串兩邊的空格 ,實(shí)例,將一文件名的擴(kuò)展名改為.dat。例:1.txt改為1.dat,using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _011 class Program static void Main(string args) string filename = 1.2.txt; int indexDot = filename.La

23、stIndexOf(.); string extendName = dat; filename = filename.Substring(0, indexDot+1); filename += extendName; Console.WriteLine(filename); ,String 常用方法應(yīng)用1,已有如下代碼,按要求增加功能:,static void Main(string args) string email; / 電子郵件地址 Console.WriteLine(請(qǐng)輸入你的郵箱:); email = Console.ReadLine(); Console.WriteLine(你的

24、郵箱是 0, email); ,需實(shí)現(xiàn)的功能: 1、 輸入 yes 時(shí),程序循環(huán)執(zhí)行 2、 兼容以下各種形式 yes(YES、yes、 YeS .) 3、 提取郵箱的用戶名,using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _011 class Program static void Main(string args) while(1) string email; / 電子郵件地址 Console.WriteLine(請(qǐng)輸入你的郵箱:); email =

25、 Console.ReadLine(); Console.WriteLine(你的郵箱是 0, email); Console.WriteLine(繼續(xù)輸入郵箱嗎?); string input = Console.ReadLine(); if (input.ToUpper() = YES) continue; else break; ,while (true),String 常用方法應(yīng)用2,輸入一個(gè)字符串,輸出每個(gè)單詞,重新用下劃線連接輸出,使用 Split() 方法分割字符串 使用 Join() 方法連接字符串,Split()方法分割字符串,代碼分析,splitStrings = inpu

26、tString.Split( );,/ 將分割后的字符串使用下劃線連接在一起 joinString = string.Join(_, splitStrings);,返回值為 字符串?dāng)?shù)組,字符串變量名,參數(shù):分隔符(char型),返回字符串,靜態(tài)方法,參數(shù)1:連接符 參數(shù)2:字符串?dāng)?shù)組,關(guān)鍵代碼:,Join()方法連接字符串,using System; class Program static void Main(string args) string inputString; inputString = Console.ReadLine(); inputString = inputString

27、.Trim(); string splitStrings = inputString.Split( ); string joinString = string.Join(_, splitStrings); Console.WriteLine(joinString); ,如果字符串兩邊有空格?,Format() 方法,兩種輸出字符串的方式:,string name = 李四; Console.WriteLine(My name is + name + ,I am + 18);,string name = 李四; Console.WriteLine(My name is 0 ,I am 1 , n

28、ame,18);,格式字符串,變量列表,String類(lèi)的Format()方法用來(lái)格式化字符串,關(guān)鍵代碼:,record = string.Format( 姓名:0n出生年月:1n身高:2n 血型:3n星座:4n最喜歡的食物:5, name, birthday, height, bloodType, planet, favourFood); Console.WriteLine(n這是你的個(gè)人檔案:); Console.WriteLine(record);,參數(shù)與 WritLine() 方法相似,Format() 的語(yǔ)法小結(jié),string myString = string.Format(格式字符

29、串, 參數(shù)列表);,string myString = string.Format (0 乘以 1 等于 2 , 2, 3, 2*3);,格式字符串,代表,參數(shù)列表,2乘以3等于6,包括占位符x,小結(jié),補(bǔ)充下劃線處的占位符,輸出五個(gè)成語(yǔ),string yi = 一; string er = 二; string san = 三; string word = string.Format( 獨(dú) _ 無(wú) _,_ 心 _ 意,垂涎 _ 尺,略知 _ _,舉_ 反 _, yi, er, san); Console.WriteLine(word);,string yi = 一; string er = 二;

30、 string san = 三; string word = string.Format( 獨(dú)0無(wú)1,2心1意,垂涎2尺,略知01,舉0反2, yi, er, san); Console.WriteLine(word);,枚舉,access modifiers enum :enum_base enum body,class MyApp enum Fabric : int Cotton = 1, Silk = 2, Wool = 4 static void Main() Fabric fab = Fabric.Cotton; int fabNum = (int) fab; string fabT

31、ype = fab.ToString(); Console.WriteLine(fab); ,整型,默認(rèn)為int,默認(rèn)為internal,枚舉和位標(biāo)志,namespace MyHelloApp class myApp Flags enum Fabric Cotton = 1, Silk = 2 static void Main() Fabric fab1 = (Fabric)3; Console.WriteLine(fab1.ToString(); ,System.Enum的方法,using System; namespace App1 class myApp enum Fabric Cott

32、on = 1, Silk = 2 static void Main() string fabStr = Cotton; if (Enum.IsDefined(typeof(Fabric), fabStr) Fabric fab = (Fabric)Enum.Parse(typeof(Fabric), fabStr); Console.WriteLine(Enum.GetName(typeof(Fabric), 2); ,變量,static void Main(string args) / 聲明布爾型、字符串型、整型、短整型和浮點(diǎn)型變量 bool t = false; short n1 = 30

33、; int n2 = 1200; string str = jeny; float n3 = 23.1f; / 顯示變量值 Console.WriteLine (布爾值 = + t); Console.WriteLine (短整型值 = + n1); Console.WriteLine (整型值 = + n2); Console.WriteLine (字符串值 = + str); Console.WriteLine (浮點(diǎn)值 = + n3); ,變量中存儲(chǔ)的值取決于該變量的類(lèi)型,常量,static void Main(string args) / PI常量PI const float _pi

34、= 3.1415169F; / 由地球引力引起的加速度常量,單位為 cm/s*s const float _gravity = 980; / 鐘擺的長(zhǎng)度 int length = 60; / 鐘擺的周期 double period = 0; / 鐘擺周期的計(jì)算公式 period = 2 * _pi * Math.Sqrt(length / _gravity); Console.WriteLine (鐘擺的周期為 0 秒, period); ,聲明常量,在表達(dá)式中使用常量,const 關(guān)鍵字用于聲明常量,數(shù)組,數(shù)組是同一數(shù)據(jù)類(lèi)型的一組值 數(shù)組屬于引用類(lèi)型,因此存儲(chǔ)在堆內(nèi)存中 數(shù)組元素初始化或給數(shù)

35、組元素賦值都可以在聲明數(shù)組時(shí)或在程序的后面階段中進(jìn)行 語(yǔ)法: 數(shù)據(jù)類(lèi)型, 數(shù)組名稱(chēng) = new 類(lèi)型 n,; int arrayHere = new int 6;,數(shù)組,static void Main(string args) int count; Console.WriteLine(“請(qǐng)輸入準(zhǔn)備登機(jī)的乘客人數(shù) ); count=int.Parse(Console.ReadLine(); / 聲明一個(gè)存放姓名的字符串?dāng)?shù)組,其長(zhǎng)度等于乘客人數(shù) string names = new stringcount; / 用一個(gè) for 循環(huán)來(lái)接受姓名 for(int i=0; icount; i+) C

36、onsole.WriteLine(“請(qǐng)輸入第 0 個(gè)乘客的姓名 ,i+1); namesi=Console.ReadLine(); Console.WriteLine(“已登機(jī)的乘客有: ); / 用 foreach 循環(huán)顯示姓名 foreach(string disp in names) Console.WriteLine(0, disp); ,數(shù)組聲明,初始化數(shù)組元素的循環(huán),顯示輸出的循環(huán),一維數(shù)組和多維數(shù)組都屬于矩形數(shù)組,而C#所特有的不規(guī)則數(shù)組是數(shù)組的數(shù)組,在它的內(nèi)部,每個(gè)數(shù)組的長(zhǎng)度可以不同,就像一個(gè)鋸齒形狀。 (1)不規(guī)則數(shù)組的聲明 語(yǔ)法形式: type arrayName ; 方括

37、號(hào) 的個(gè)數(shù)與數(shù)組的維數(shù)相關(guān)。 例如: int jagged ; / jagged是一個(gè)int類(lèi)型的二維不規(guī)則數(shù)組 (2)創(chuàng)建數(shù)組對(duì)象 以二維不規(guī)則數(shù)組為例:,3不規(guī)則數(shù)組,struct structEx public int structDataMember; public void structMethod1() /structMethod1 實(shí)現(xiàn) ,自定義數(shù)據(jù)類(lèi)型 可以在其內(nèi)部定義方法 無(wú)法實(shí)現(xiàn)繼承 屬于值類(lèi)型 主要結(jié)構(gòu):,struct student public int stud_id; public string stud_name; public float stud_marks;

38、 public void show_details() /顯示學(xué)生詳細(xì)信息 ,結(jié)構(gòu),數(shù)據(jù)成員,方法,所有與 Student 關(guān)聯(lián)的詳細(xì)信息都可以作為一個(gè)整體進(jìn)行存儲(chǔ)和訪問(wèn),C# 的基本數(shù)據(jù)類(lèi)型,C#中的數(shù)據(jù)類(lèi)型分為兩個(gè)基本類(lèi)別 值類(lèi)型 表示實(shí)際數(shù)據(jù) 只是將值存放在內(nèi)存中 值類(lèi)型都存儲(chǔ)在堆棧中 int、char、結(jié)構(gòu) 引用類(lèi)型 表示指向數(shù)據(jù)的指針或引用 包含內(nèi)存堆中對(duì)象的地址 為 null,則表示未引用任何對(duì)象 類(lèi)、接口、數(shù)組、字符串,C# 的基本數(shù)據(jù)類(lèi)型,static void Main(string args) / 聲明一個(gè)值類(lèi)型的整型數(shù)據(jù)類(lèi)型 int value = 130; Consol

39、e.WriteLine(該變量的初始值為 0, value); Test(value); / 由于該數(shù)據(jù)類(lèi)型屬于值類(lèi)型,所以將恢復(fù)其初始值 Console.WriteLine(該變量的值此時(shí)為 0, value); static void Test(int byVal) int t = 20; byVal = t* 30; ,將value的初始值傳遞給Test()方法,不反映已經(jīng)改變的val值,而保留原始值,C# 的基本數(shù)據(jù)類(lèi)型,static void Main(string args) DataType objTest = new DataType (); objTest.Value = 1

40、30; / 傳遞屬于引用類(lèi)型的對(duì)象 Test(objTest); / 由于該數(shù)據(jù)類(lèi)型屬于引用類(lèi)型,所以會(huì)考慮新處理的值 Console.WriteLine(變量的值為 0, objTest.Value); static void Test(DataType data) int t = 20; data.Val = temp * 30; ,將 DataTypeTest 的引用傳遞給 Test(),被傳遞的value在Test()中改變,反映已經(jīng)改變的value值,class DataType public int Value; ,引用類(lèi)型和值類(lèi)型,System.Object方法,引用類(lèi)型和值類(lèi)型

41、的內(nèi)存分配,值類(lèi)型存儲(chǔ)在運(yùn)行棧,引用類(lèi)型存儲(chǔ)在托管堆 Apparel myApparel = new Apparel(); Apparel myApparel1 = myApparel;,Class Apparel public double Price = 250.0; public string FabType = “Syn”; ,棧,托管堆,裝箱與拆箱,裝箱即將值類(lèi)型轉(zhuǎn)換為引用 int age = 17; Object refAge = age 拆箱即將引用類(lèi)型轉(zhuǎn)換為值類(lèi)型。 int newAge = (int)refAge; double newAge = (double)refAge

42、; /錯(cuò)誤,要具有相同類(lèi)型,運(yùn)算符和表達(dá)式,運(yùn)算符和表達(dá)式,運(yùn)算符和表達(dá)式,運(yùn)算符和表達(dá)式,運(yùn)算符和表達(dá)式 9-6,賦值運(yùn)算符 (=),變量 = 表達(dá)式; 例如: 身高 = 177.5; 體重 = 78; 性別 = “m”;,運(yùn)算符和表達(dá)式 9-7,一元運(yùn)算符 (+/-),Variable +; 相當(dāng)于 Variable = Variable + 1; Variable -; 相當(dāng)于 Variable = Variable - 1;,運(yùn)算符和表達(dá)式,運(yùn)算符和表達(dá)式,C# 運(yùn)算符的優(yōu)先級(jí),選擇結(jié)構(gòu),語(yǔ)法: if () else ,選擇結(jié)構(gòu)用于根據(jù)表達(dá)式的值執(zhí)行語(yǔ)句,if else,條件:只能是b

43、ool類(lèi)型的值,選擇結(jié)構(gòu),switch (“cotton”) case “COTTON”: case “cotton”: break; case 值3: case 值4: break; ,switchcase,表達(dá)式可以是int、字符或字符串 C#不允許從一個(gè)case塊繼續(xù)執(zhí)行到下一個(gè)case塊。每個(gè)case塊必須以一個(gè)跳轉(zhuǎn)控制語(yǔ)句break、goto或return結(jié)束 多個(gè)case標(biāo)簽可以對(duì)應(yīng)一個(gè)代碼塊,循環(huán)結(jié)構(gòu),循環(huán)結(jié)構(gòu)用于對(duì)一組命令執(zhí)行一定的次數(shù)或反復(fù)執(zhí)行一組命令,直到指定的條件為真。 循環(huán)結(jié)構(gòu)的類(lèi)型 while 循環(huán) do 循環(huán) for 循環(huán) foreach 循環(huán),條件:只能是bool

44、類(lèi)型的值,while 循環(huán)反復(fù)執(zhí)行指定的語(yǔ)句,直到指定的條件為真 語(yǔ)法 : while (條件) / 語(yǔ)句 break 語(yǔ)句可用于退出循環(huán) continue 語(yǔ)句可用于跳過(guò)當(dāng)前循環(huán)并開(kāi)始下一循環(huán),while 循環(huán),dowhile 循環(huán),dowhile 循環(huán)與 while 循環(huán)類(lèi)似,二者區(qū)別在于 dowhile 循環(huán)中即使條件為假時(shí)也至少執(zhí)行一次該循環(huán)體中的語(yǔ)句。 語(yǔ)法 : do / 語(yǔ)句 while (條件),for 循環(huán),for 循環(huán)要求只有在對(duì)特定條件進(jìn)行判斷后才允許執(zhí)行循環(huán) 這種循環(huán)用于將某個(gè)語(yǔ)句或語(yǔ)句塊重復(fù)執(zhí)行預(yù)定次數(shù)的情形 語(yǔ)法 : for (初始值; 條件; 增/減) /語(yǔ)句 ,f

45、oreach 循環(huán) 2-1,foreach 循環(huán)用于遍歷整個(gè)集合或數(shù)組 語(yǔ)法: foreach (數(shù)據(jù)類(lèi)型 元素(變量) in 集合或者數(shù)組) /語(yǔ)句 ,foreach 循環(huán)2-2,static void Main(string args) / 存放字母的個(gè)數(shù) int Letters = 0; / 存放數(shù)字的個(gè)數(shù) int Digits = 0; / 存放標(biāo)點(diǎn)符號(hào)的個(gè)數(shù) int Punctuations = 0; / 用戶提供的輸入 string instr; Console.WriteLine(請(qǐng)輸入一個(gè)字符串 ); instr = Console.ReadLine(); / 聲明 forea

46、ch 循環(huán)以遍歷輸入的字符串中的每個(gè)字符。 foreach(char ch in instr) / 檢查字母 if(char.IsLetter(ch) Letters+; / 檢查數(shù)字 if(char.IsDigit(ch) Digits+; / 檢查標(biāo)點(diǎn)符號(hào) if(char.IsPunctuation(ch) Punctuations+; Console.WriteLine(“字母?jìng)€(gè)數(shù)為: 0, Letters); Console.WriteLine(“數(shù)字個(gè)數(shù)為: 0, Digits); Console.WriteLine(“標(biāo)點(diǎn)符號(hào)個(gè)數(shù)為: 0, Punctuations); ,為所有計(jì)

47、數(shù)器設(shè)置初始值,接受輸入,對(duì)輸入的每一個(gè) 字符都進(jìn)行循環(huán),使用了所有輸入的字符 之后,循環(huán)自動(dòng)終止,using System; public class WriteTest public static void Main() int array = 1, 2, 3, 4, 5 ; foreach (int item in array) Console.WriteLine(item); ,using System; public class WriteTest public static void Main() int array = 1, 2, 3, 4, 5 ; foreach (int i

48、tem in array) item += item; Console.WriteLine(item); ,C#的預(yù)處理指令2-1,預(yù)處理指令是C#編譯器在詞法分析階段讀取的語(yǔ)句。這些語(yǔ)句可以指示編譯器包含或不包含某些代碼,甚至可以根據(jù)預(yù)處理指令的值終止編譯。預(yù)處理指令由字符#標(biāo)識(shí),并且字符#必須是該行的第一個(gè)非空字符。 預(yù)處理指令最常見(jiàn)的三個(gè)用途是:完成條件編譯、增加診斷來(lái)報(bào)告錯(cuò)誤和警告、定義代碼域。,C#的預(yù)處理指令2-2,#define CLIENT #define DEBUG using System; public class MyApp public static void Mai

49、n() #if DEBUG Read方法返回所讀取的字符的Unicode編碼值。 注意: Read方法的返回變量是32位的整數(shù),如果需要得到輸入的字符,則必須通過(guò)數(shù)據(jù)類(lèi)型的顯式轉(zhuǎn)換才能得到相應(yīng)的字符。,控制臺(tái)輸入和輸出,Console.Read () /ReadTest.cs using System; public class ReadTest public static void Main() inti; charch; i=Console.Read(); ch=(char) i;/顯式類(lèi)型轉(zhuǎn)換 Console.WriteLine(i); Console.WriteLine(ch); ,運(yùn)

50、行結(jié)果: A 65 A,控制臺(tái)輸入和輸出,Console.ReadLine ()方法 Console.ReadLine方法用來(lái)從控制臺(tái)讀取一行字符,定義如下: Public static string ReadLine(); Read方法返回所讀取一行字符的字符串。一般情況下,一行輸入是指從輸入一個(gè)字符開(kāi)始,遇到回車(chē)符號(hào)為止。,控制臺(tái)輸入和輸出,/ReadLine.cs using System; using System.Globalization; public class ReadTest public static void Main() inti; doubled; stringst

51、r; str=Console.ReadLine();/由控制臺(tái)輸入整數(shù)字符串 i=int.Parse(str);/整數(shù)字符串轉(zhuǎn)換為整數(shù) Console.WriteLine(i); str=Console.ReadLine();/由控制臺(tái)輸入浮點(diǎn)字符串 d=double.Parse(str);/浮點(diǎn)字符串轉(zhuǎn)換為浮點(diǎn)數(shù) Console.WriteLine(d); ,運(yùn)行結(jié)果: 1234 1234 123.456 123.456,控制臺(tái)輸入和輸出,數(shù)據(jù)輸出(Write WriteLine) Console.Write ()方法 Console.Write方法用來(lái)向控制臺(tái)輸出一個(gè)字符,但控制臺(tái)的光標(biāo)不

52、會(huì)移到下一行。其定義如下: public static void Write(XXX value); public static void Write(string format,object o1,); 注意:格式化format同格式化函數(shù)Format中的格式化串類(lèi)似,其格式如下: N,M:formatstring 其中,字符N表示輸出變量的序號(hào),M表示輸入變量在控制臺(tái)中所占的字符空間,如果這個(gè)數(shù)字為負(fù)數(shù),則按照左對(duì)齊的方式輸出,若為正數(shù),則按照右對(duì)齊方式輸出。,控制臺(tái)輸入和輸出,/WriteTest.cs using System; public class WriteTest publi

53、c static void Main() int i=32767; double d=456.56789; /由控制臺(tái)。按照十進(jìn)制輸出整數(shù)及浮點(diǎn)數(shù) Console.Write(“i=0 x0,8:Xtd=1,10:F3”,i,d); /由控制臺(tái)。按照十六進(jìn)制輸出整數(shù) Console.Write(“i=0 x0,-8:Xtd=1,-10:F3”,i,d); 輸出結(jié)果: i=0 x 7FFF d= 456.568i=0 x7FFF d=456.568,控制臺(tái)輸入和輸出,Console.WriteLine()方法 Console.WriteLine方法用來(lái)向控制臺(tái)輸出一行字符,即WriteLine方

54、法在輸出信息之后,在信息的尾部自動(dòng)添加“rn”字符,表示回車(chē)換行。 public static void WriteLine(XXX value); public static void WriteLine(string format,object o1,); 注意:格式化format同WriteLine中的格式化參數(shù)完全一樣。,控制臺(tái)輸入和輸出,/WriteLine.cs using System; public class WriteTest public static void Main() inti=32767; doubled=456.56789; /格式化輸出 Console.Wr

55、iteLine(“i=0 x0,8:Xtd=1,10:F3”,i,d); Console.WriteLine(“i=0 x0,-8:Xtd=1,-10:F3”,i,d); Console.WriteLine(“i=0 x0,-8:Dtd=1,-10:C3”,i,d); 輸出結(jié)果: i=0 x 7FFF d= 456.568 i=0 x7FFF d=456.568 i=32767 d=¥456.568,第3章 C#面向?qū)ο笤O(shè)計(jì),結(jié)構(gòu)程序設(shè)計(jì)的不足數(shù)據(jù)與方法分離,void SpeedUp(int ,double speed = 0;,結(jié)構(gòu)程序設(shè)計(jì)的不足代碼不能重用,void main() int

56、doorN_car1 = 2; int color_car1 = 0; int speed_car1 = 100; printf(%d %d %dn, doorN_car1, color_car1, speed_car1); int doorN_car2 = 4; int color_car2 = 1; int speed_car2 = 80; printf(%d %d %dn, doorN_car2, color_car2, speed_car2); ,C#的面向?qū)ο筇匦?所有東西都是對(duì)象:變量和方法的集合。 初級(jí)特性:OO最基本的概念,即類(lèi)和對(duì)象。 中級(jí)特性:OO最核心的概念,即封裝、繼承

57、和多態(tài)。 高級(jí)特性:由初級(jí)特性和中級(jí)特性引出的一些問(wèn)題,如構(gòu)造函數(shù)的使用、覆蓋的規(guī)則、靜態(tài)變量和函數(shù)等。,初級(jí)特性,面向?qū)ο蠹夹g(shù)最基本的概念是類(lèi)和對(duì)象: 類(lèi)是一個(gè)樣板,以操作、表示和算法的形式完整地定義了一組對(duì)象的行為。它通常也是面向?qū)ο笳Z(yǔ)言中的模塊化、封裝和數(shù)據(jù)抽象的基礎(chǔ)。 對(duì)象是類(lèi)的一個(gè)實(shí)例,是一個(gè)軟件單元,它由一組結(jié)構(gòu)化的數(shù)據(jù)和在其上的一組操作構(gòu)成。,抽象數(shù)據(jù)類(lèi)型,類(lèi)實(shí)際上為實(shí)際的物體在計(jì)算機(jī)中定義了一種抽象數(shù)據(jù)類(lèi)型。 抽象數(shù)據(jù)類(lèi)型是僅由數(shù)據(jù)類(lèi)型和可能在這個(gè)數(shù)據(jù)類(lèi)型上進(jìn)行的操作定義的。 使用者只能通過(guò)操作方法來(lái)訪問(wèn)其屬性,不用知道這個(gè)數(shù)據(jù)類(lèi)型內(nèi)部各種操作是如何實(shí)現(xiàn)的。,class Car

58、 public int doorN; public int color; public int speed; public void SpeedUp() speed += 10; class MyApp static void Main() Car car1; car1.doorN = 2; car1.color = 0; car1.speed = 100; Car car2; car2.doorN = 4; car2.color = 1; car2.speed = 80; ,public double speed;,面向?qū)ο蟪绦蛟O(shè)計(jì)封裝、代碼重用,3.2 類(lèi)與對(duì)象,類(lèi):C#所有的代碼都是在某一個(gè)類(lèi)中,因此不可能在類(lèi)之外的全局區(qū)域有變量和方法。 對(duì)象:C#中的對(duì)象相當(dāng)于一塊內(nèi)存區(qū)域,保存對(duì)象特有的類(lèi)中所定義的數(shù)據(jù)。 引用:C#中對(duì)于對(duì)象的操作全部通過(guò)引用進(jìn)行。,3

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論