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

下載本文檔

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

文檔簡介

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

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

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

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

5、,clientlib.dll,client.exe,module,IL語言范例,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ùn)行時CLR,.NET的語言互操作性: 不同語

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

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

8、放入命名空間可以把相關(guān)的類組織起來,并且可以避免命名沖突。命名空間既用作程序的“內(nèi)部”組織系統(tǒng),也用作“外部”組織系統(tǒng)(一種向其他程序公開自己擁有的程序元素的方法) 使用命名空間:using 類似#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)用程序,單擊“開始”“程序”“Microsoft Visual Studio .NET 2005”“Microsoft Visual Studio .NET 2005” 此時將打開 VS.NET 2005 的起始頁 要創(chuàng)建 C# 控制臺應(yīng)用程序,請從列表中選擇 “創(chuàng)建建”“項目”。此時將打開“新建項目”窗口 選擇“Visual C# 項目”作為項目類型,選擇“控制臺應(yīng)用程序”作為模板,C# 模板,Console.WriteLine(Hello World);,輸出,HelloWorld.csproj AssemblyInfo.cs Program.cs,“Hello World”應(yīng)用

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

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

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

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

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

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

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

17、d”是WriteLine方法的參數(shù),表示屏幕輸出 的內(nèi)容,第一個 C# 程序 :HelloWorld,系統(tǒng)預(yù)定義類型,系統(tǒng)預(yù)定義類型,字面量,int: int iMax = int.MaxValue; int pVal = int.Parse(“100”); short i16 = 50; int i32 = i16; i16 = i32; 錯誤 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; /錯誤 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”; 字符串操作 索引字符串中的單個字符 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() :比較兩個字符串的值是否相等 ToLower():將字符串轉(zhuǎn)換成小寫形式 IndexOf():查找某個字符在字符串中的位置 Su

22、bString():從字符串中截取子字符串 Join():連接字符串 Split():分割字符串 Trim():去掉字符串兩邊的空格 ,實例,將一文件名的擴(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(請輸入你的郵箱:); email = Console.ReadLine(); Console.WriteLine(你的

24、郵箱是 0, email); ,需實現(xiàn)的功能: 1、 輸入 yes 時,程序循環(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(請輸入你的郵箱:); 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,輸入一個字符串,輸出每個單詞,重新用下劃線連接輸出,使用 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類的Format()方法用來格式化字符串,關(guān)鍵代碼:,record = string.Format( 姓名:0n出生年月:1n身高:2n 血型:3n星座:4n最喜歡的食物:5, name, birthday, height, bloodType, planet, favourFood); Console.WriteLine(n這是你的個人檔案:); Console.WriteLine(record);,參數(shù)與 WritLine() 方法相似,Format() 的語法小結(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ǔ)充下劃線處的占位符,輸出五個成語,string yi = 一; string er = 二; string san = 三; string word = string.Format( 獨(dú) _ 無 _,_ 心 _ 意,垂涎 _ 尺,略知 _ _,舉_ 反 _, yi, er, san); Console.WriteLine(word);,string yi = 一; string er = 二;

30、 string san = 三; string word = string.Format( 獨(dú)0無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); ,變量中存儲的值取決于該變量的類型,常量,static void Main(string args) / PI常量PI const float _pi

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

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

36、onsole.WriteLine(“請輸入第 0 個乘客的姓名 ,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)部,每個數(shù)組的長度可以不同,就像一個鋸齒形狀。 (1)不規(guī)則數(shù)組的聲明 語法形式: type arrayName ; 方括

37、號 的個數(shù)與數(shù)組的維數(shù)相關(guān)。 例如: int jagged ; / jagged是一個int類型的二維不規(guī)則數(shù)組 (2)創(chuàng)建數(shù)組對象 以二維不規(guī)則數(shù)組為例:,3不規(guī)則數(shù)組,struct structEx public int structDataMember; public void structMethod1() /structMethod1 實現(xiàn) ,自定義數(shù)據(jù)類型 可以在其內(nèi)部定義方法 無法實現(xiàn)繼承 屬于值類型 主要結(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ì)信息都可以作為一個整體進(jìn)行存儲和訪問,C# 的基本數(shù)據(jù)類型,C#中的數(shù)據(jù)類型分為兩個基本類別 值類型 表示實際數(shù)據(jù) 只是將值存放在內(nèi)存中 值類型都存儲在堆棧中 int、char、結(jié)構(gòu) 引用類型 表示指向數(shù)據(jù)的指針或引用 包含內(nèi)存堆中對象的地址 為 null,則表示未引用任何對象 類、接口、數(shù)組、字符串,C# 的基本數(shù)據(jù)類型,static void Main(string args) / 聲明一個值類型的整型數(shù)據(jù)類型 int value = 130; Consol

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

40、30; / 傳遞屬于引用類型的對象 Test(objTest); / 由于該數(shù)據(jù)類型屬于引用類型,所以會考慮新處理的值 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; ,引用類型和值類型,System.Object方法,引用類型和值類型

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

42、; /錯誤,要具有相同類型,運(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)先級,選擇結(jié)構(gòu),語法: if () else ,選擇結(jié)構(gòu)用于根據(jù)表達(dá)式的值執(zhí)行語句,if else,條件:只能是b

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

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

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

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

47、數(shù)器設(shè)置初始值,接受輸入,對輸入的每一個 字符都進(jìn)行循環(huán),使用了所有輸入的字符 之后,循環(huán)自動終止,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#編譯器在詞法分析階段讀取的語句。這些語句可以指示編譯器包含或不包含某些代碼,甚至可以根據(jù)預(yù)處理指令的值終止編譯。預(yù)處理指令由字符#標(biāo)識,并且字符#必須是該行的第一個非空字符。 預(yù)處理指令最常見的三個用途是:完成條件編譯、增加診斷來報告錯誤和警告、定義代碼域。,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ù),如果需要得到輸入的字符,則必須通過數(shù)據(jù)類型的顯式轉(zhuǎn)換才能得到相應(yīng)的字符。,控制臺輸入和輸出,Console.Read () /ReadTest.cs using System; public class ReadTest public static void Main() inti; charch; i=Console.Read(); ch=(char) i;/顯式類型轉(zhuǎn)換 Console.WriteLine(i); Console.WriteLine(ch); ,運(yùn)

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

51、r; str=Console.ReadLine();/由控制臺輸入整數(shù)字符串 i=int.Parse(str);/整數(shù)字符串轉(zhuǎn)換為整數(shù) Console.WriteLine(i); str=Console.ReadLine();/由控制臺輸入浮點(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,控制臺輸入和輸出,數(shù)據(jù)輸出(Write WriteLine) Console.Write ()方法 Console.Write方法用來向控制臺輸出一個字符,但控制臺的光標(biāo)不

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

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

54、法在輸出信息之后,在信息的尾部自動添加“rn”字符,表示回車換行。 public static void WriteLine(XXX value); public static void WriteLine(string format,object o1,); 注意:格式化format同WriteLine中的格式化參數(shù)完全一樣。,控制臺輸入和輸出,/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è)計,結(jié)構(gòu)程序設(shè)計的不足數(shù)據(jù)與方法分離,void SpeedUp(int ,double speed = 0;,結(jié)構(gòu)程序設(shè)計的不足代碼不能重用,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ū)ο筇匦?所有東西都是對象:變量和方法的集合。 初級特性:OO最基本的概念,即類和對象。 中級特性:OO最核心的概念,即封裝、繼承

57、和多態(tài)。 高級特性:由初級特性和中級特性引出的一些問題,如構(gòu)造函數(shù)的使用、覆蓋的規(guī)則、靜態(tài)變量和函數(shù)等。,初級特性,面向?qū)ο蠹夹g(shù)最基本的概念是類和對象: 類是一個樣板,以操作、表示和算法的形式完整地定義了一組對象的行為。它通常也是面向?qū)ο笳Z言中的模塊化、封裝和數(shù)據(jù)抽象的基礎(chǔ)。 對象是類的一個實例,是一個軟件單元,它由一組結(jié)構(gòu)化的數(shù)據(jù)和在其上的一組操作構(gòu)成。,抽象數(shù)據(jù)類型,類實際上為實際的物體在計算機(jī)中定義了一種抽象數(shù)據(jù)類型。 抽象數(shù)據(jù)類型是僅由數(shù)據(jù)類型和可能在這個數(shù)據(jù)類型上進(jìn)行的操作定義的。 使用者只能通過操作方法來訪問其屬性,不用知道這個數(shù)據(jù)類型內(nèi)部各種操作是如何實現(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è)計封裝、代碼重用,3.2 類與對象,類:C#所有的代碼都是在某一個類中,因此不可能在類之外的全局區(qū)域有變量和方法。 對象:C#中的對象相當(dāng)于一塊內(nèi)存區(qū)域,保存對象特有的類中所定義的數(shù)據(jù)。 引用:C#中對于對象的操作全部通過引用進(jìn)行。,3

溫馨提示

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

評論

0/150

提交評論