




已閱讀5頁(yè),還剩425頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章C 與NET平臺(tái)介紹本章目標(biāo) 了解 NETFramework的結(jié)構(gòu)理解 NETFramework的基本概念CLRJITCTSMSIL了解 NETFramework命名空間了解C 程序的基本結(jié)構(gòu) 1C 語(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)提高效率 可是這些靈活性正是C C 程序員所需要的 這些解決方案對(duì)編程人員的限制過(guò)多 如屏蔽一些底層代碼控制的機(jī)制 所提供的功能難以令人滿(mǎn)意 這些語(yǔ)言無(wú)法方便地同早先的系統(tǒng)交互 也無(wú)法很好地和當(dāng)前的網(wǎng)絡(luò)編程相結(jié)合 對(duì)于C C 用戶(hù)來(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 Csharp 是對(duì)這一問(wèn)題的解決方案 C 是一種新的 面向?qū)ο蟮木幊陶Z(yǔ)言 它使得程序員可以快速地編寫(xiě)各種基于Microsoft NET平臺(tái)的應(yīng)用程序 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ū)ο筇匦?可以讓初學(xué)者直接了解面向?qū)ο缶幊痰母鞣N概念 學(xué)習(xí)現(xiàn)代的編程思想和手段 2 NET代碼的編譯語(yǔ)言特定的編譯器和運(yùn)行庫(kù) 代碼被執(zhí)行 IL 元數(shù)據(jù) CLR IL和CLR的使用IntermediateLanguageCommonLanguageRuntime 編譯執(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 clientlib dll client exe module IL語(yǔ)言范例 IL 0000 nopIL 0001 callIL 0006 nopIL 0007 ldc i4 0IL 0008 callIL 000d nopIL 000e ldnullIL 000f ldftnIL 0015 newobjIL 001a callIL 001f nopIL 0020 newobjIL 0025 callIL 002a nopIL 002b newobjIL 0030 throw 通用語(yǔ)言運(yùn)行時(shí)CLR NET的語(yǔ)言互操作性 不同語(yǔ)言編寫(xiě)的代碼可互相調(diào)用C 的平臺(tái)移植性 框架JIT編譯器 JustInTime 即時(shí)編譯器 3 NETFramework簡(jiǎn)介 NETFramework類(lèi)似于JVM NETFramework兩個(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) NETFramework的體系結(jié)構(gòu) VisualStudio NET CLR通用語(yǔ)言運(yùn)行時(shí) CLR BaseClassLibrary IO Drawing Threading DataandXML XMLWebservices WindowsForms WebForms 通用語(yǔ)言規(guī)范 CLS VB C C JScript 操作系統(tǒng) NetFramework類(lèi)庫(kù) FCL CLS和CTS 通用語(yǔ)言規(guī)范CLSCommonLanguageSpecification規(guī)定所有 NET語(yǔ)言都應(yīng)遵循的規(guī)則生成可與其他語(yǔ)言互操作的應(yīng)用程序通用類(lèi)型系統(tǒng) CommonTypeSystem 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)放入命名空間可以把相關(guān)的類(lèi)組織起來(lái) 并且可以避免命名沖突 命名空間既用作程序的 內(nèi)部 組織系統(tǒng) 也用作 外部 組織系統(tǒng) 一種向其他程序公開(kāi)自己擁有的程序元素的方法 使用命名空間 using類(lèi)似 include 4命名空間 1 HclassA 2 HclassA 3 cpp include 1 h include 2 h 3 cppclassA classA namespacea1 classA namespacea2 classA 3 csusinga1 usinga2 a1 Aa2 A 常用命名空間 5創(chuàng)建 HelloWorld 應(yīng)用程序 單擊 開(kāi)始 程序 MicrosoftVisualStudio NET2005 MicrosoftVisualStudio NET2005 此時(shí)將打開(kāi)VS NET2005的起始頁(yè)要?jiǎng)?chuàng)建C 控制臺(tái)應(yīng)用程序 請(qǐng)從列表中選擇 創(chuàng)建建 項(xiàng)目 此時(shí)將打開(kāi) 新建項(xiàng)目 窗口選擇 VisualC 項(xiàng)目 作為項(xiàng)目類(lèi)型 選擇 控制臺(tái)應(yīng)用程序 作為模板 C 模板 Console WriteLine HelloWorld 輸出 HelloWorld csprojAssemblyInfo csProgram cs HelloWorld 應(yīng)用程序文件 編譯和執(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) VisualStudio NET2005創(chuàng)建一個(gè)與項(xiàng)目同名的文件夾 此處為 HelloWorld 該文件夾包含項(xiàng)目文件 HelloWorld csproj 和其他關(guān)聯(lián)文件每個(gè)新項(xiàng)目都創(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程序usingSystem namespaceNotepad classHelloWorld staticvoidMain Console WriteLine HelloWorld 聲明HelloWorld類(lèi) 描述代碼的注釋 HelloWorld程序 程序入口點(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è)或者多個(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 usingSystem classHelloWorld staticvoidMain Console WriteLine Hello World HelloWorld cs 第一個(gè)C 程序 HelloWorld 1 usingSystem 第1行 using關(guān)鍵字用來(lái)引用 NET框架類(lèi)庫(kù)中的資源通常在程序文件的開(kāi)頭使用如果程序中需要多種資源 可以使用多次usingSystem命名空間System命名空間提供了構(gòu)建應(yīng)用程序所需的系統(tǒng)統(tǒng)能的訪問(wèn) 第一個(gè)C 程序 HelloWorld 2 classHelloWorld3 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 staticvoidMain 5 7 第4 5 7行 Main方法Main方法是應(yīng)用程序的入口點(diǎn) 編譯器將由該處開(kāi)始執(zhí)行程序方法體也放在一對(duì) 中每個(gè)C 的應(yīng)用程序都必須包含Main方法 4 staticvoidMain 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ǔ)句之間用 分隔 編譯器通過(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ū)ο蟮姆椒ㄊ褂命c(diǎn)取符 來(lái)完成 字符串用雙引號(hào) 表示字符串 Hello World 是WriteLine方法的參數(shù) 表示屏幕輸出的內(nèi)容 第一個(gè)C 程序 HelloWorld 系統(tǒng)預(yù)定義類(lèi)型 系統(tǒng)預(yù)定義類(lèi)型 字面量 int intiMax int MaxValue intpVal int Parse 100 shorti16 50 inti32 i16 i16 i32 錯(cuò)誤i16 short i32 decimaldecimaliRate 3 9834M iRate decimal Round iRate 2 四舍五入iRate decimal Remainder 512 0M 51 0M boolboolbt bool 1 錯(cuò)誤charstringpattern 123abcd boolbt 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 doublefloatf 24567 66f doubled 124 45 If Single IsNaN 1 0 使用Parse轉(zhuǎn)換數(shù)字字符串shortshParse Int16 Parse 100 intiParse Int32 Parse 100 longshParse Int64 Parse 100 decimaldParse decimal Parse 99 99 floatsParse float Parse 99 99 doubledParse double Parse 99 99 字符串 字符串直接量stringpath path C note txt path C note txt 字符串操作索引字符串中的單個(gè)字符stringstr abcd charc str 0 字符串連接strings1 Myage intmyAge 28 stringcat s1 myAge 字符串操作抽取和定位子串stringpoem InXanadudidKublaKhan stringpoemSeg poem Substring 10 poemSeg poem Substring 0 9 intindex poem IndexOf I index poem LastIndexOf n 比較字符串boolisMatch stringtitle AncientMariner isMatch title ANCIENTAMRINER isMatch title ToUpper ANCIENTMARINER isMatch title Equals AncientMariner String常用方法 C 中常用的字符串處理方法 Equals 比較兩個(gè)字符串的值是否相等ToLower 將字符串轉(zhuǎn)換成小寫(xiě)形式IndexOf 查找某個(gè)字符在字符串中的位置SubString 從字符串中截取子字符串Join 連接字符串Split 分割字符串Trim 去掉字符串兩邊的空格 實(shí)例 將一文件名的擴(kuò)展名改為 dat 例 1 txt改為1 dat usingSystem usingSystem Collections Generic usingSystem Linq usingSystem Text namespace 011 classProgram staticvoidMain string args stringfilename 1 2 txt intindexDot filename LastIndexOf stringextendName dat filename filename Substring 0 indexDot 1 filename extendName Console WriteLine filename String常用方法應(yīng)用1 已有如下代碼 按要求增加功能 staticvoidMain string args stringemail 電子郵件地址Console WriteLine 請(qǐng)輸入你的郵箱 email Console ReadLine Console WriteLine 你的郵箱是 0 email 需實(shí)現(xiàn)的功能 1 輸入yes時(shí) 程序循環(huán)執(zhí)行2 兼容以下各種形式y(tǒng)es YES yes YeS 3 提取郵箱的用戶(hù)名 usingSystem usingSystem Collections Generic usingSystem Linq usingSystem Text namespace 011 classProgram staticvoidMain string args while 1 stringemail 電子郵件地址Console WriteLine 請(qǐng)輸入你的郵箱 email Console ReadLine Console WriteLine 你的郵箱是 0 email Console WriteLine 繼續(xù)輸入郵箱嗎 stringinput Console ReadLine if input ToUpper YES continue elsebreak while true String常用方法應(yīng)用2 輸入一個(gè)字符串 輸出每個(gè)單詞 重新用下劃線連接輸出 使用Split 方法分割字符串使用Join 方法連接字符串 Split 方法 分割字符串 代碼分析 splitStrings inputString Split 將分割后的字符串使用下劃線連接在一起joinString string Join splitStrings 返回值為字符串?dāng)?shù)組 字符串變量名 參數(shù) 分隔符 char型 返回字符串 靜態(tài)方法 參數(shù)1 連接符參數(shù)2 字符串?dāng)?shù)組 關(guān)鍵代碼 Join 方法 連接字符串 usingSystem classProgram staticvoidMain string args stringinputString inputString Console ReadLine inputString inputString Trim string splitStrings inputString Split stringjoinString string Join splitStrings Console WriteLine joinString 如果字符串兩邊有空格 Format 方法 兩種輸出字符串的方式 stringname 李四 Console WriteLine Mynameis name Iam 18 stringname 李四 Console WriteLine Mynameis 0 Iam 1 name 18 格式字符串 變量列表 String類(lèi)的Format 方法用來(lái)格式化字符串 關(guān)鍵代碼 record string Format 姓名 0 n出生年月 1 n身高 2 n血型 3 n星座 4 n最喜歡的食物 5 name birthday height bloodType planet favourFood Console WriteLine n這是你的個(gè)人檔案 Console WriteLine record 參數(shù)與WritLine 方法相似 Format 的語(yǔ)法小結(jié) stringmyString string Format 格式字符串 參數(shù)列表 stringmyString string Format 0 乘以 1 等于 2 2 3 2 3 格式字符串 代表 參數(shù)列表 2乘以3等于6 包括占位符 x 小結(jié) 補(bǔ)充下劃線處的占位符 輸出五個(gè)成語(yǔ) stringyi 一 stringer 二 stringsan 三 stringword string Format 獨(dú) 無(wú) 心 意 垂涎 尺 略知 舉 反 yi er san Console WriteLine word stringyi 一 stringer 二 stringsan 三 stringword string Format 獨(dú) 0 無(wú) 1 2 心 1 意 垂涎 2 尺 略知 0 1 舉 0 反 2 yi er san Console WriteLine word 枚舉 accessmodifiers enum enum base enumbody classMyApp enumFabric int Cotton 1 Silk 2 Wool 4 staticvoidMain Fabricfab Fabric Cotton intfabNum int fab stringfabType fab ToString Console WriteLine fab 整型 默認(rèn)為int 默認(rèn)為internal 枚舉和位標(biāo)志 namespaceMyHelloApp classmyApp Flags enumFabric Cotton 1 Silk 2 staticvoidMain Fabricfab1 Fabric 3 Console WriteLine fab1 ToString System Enum的方法 usingSystem namespaceApp1 classmyApp enumFabric Cotton 1 Silk 2 staticvoidMain stringfabStr Cotton if Enum IsDefined typeof Fabric fabStr Fabricfab Fabric Enum Parse typeof Fabric fabStr Console WriteLine Enum GetName typeof Fabric 2 變量 staticvoidMain string args 聲明布爾型 字符串型 整型 短整型和浮點(diǎn)型變量boolt false shortn1 30 intn2 1200 stringstr jeny floatn3 23 1f 顯示變量值Console WriteLine 布爾值 t Console WriteLine 短整型值 n1 Console WriteLine 整型值 n2 Console WriteLine 字符串值 str Console WriteLine 浮點(diǎn)值 n3 變量中存儲(chǔ)的值取決于該變量的類(lèi)型 常量 staticvoidMain string args PI常量PIconstfloat pi 3 1415169F 由地球引力引起的加速度常量 單位為cm s sconstfloat gravity 980 鐘擺的長(zhǎng)度intlength 60 鐘擺的周期doubleperiod 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ù)組元素賦值都可以在聲明數(shù)組時(shí)或在程序的后面階段中進(jìn)行語(yǔ)法 數(shù)據(jù)類(lèi)型 數(shù)組名稱(chēng) new類(lèi)型 n int arrayHere newint 6 數(shù)組 staticvoidMain string args intcount Console WriteLine 請(qǐng)輸入準(zhǔn)備登機(jī)的乘客人數(shù) count int Parse Console ReadLine 聲明一個(gè)存放姓名的字符串?dāng)?shù)組 其長(zhǎng)度等于乘客人數(shù)string names newstring count 用一個(gè)for循環(huán)來(lái)接受姓名for inti 0 i count i Console WriteLine 請(qǐng)輸入第 0 個(gè)乘客的姓名 i 1 names i Console ReadLine Console WriteLine 已登機(jī)的乘客有 用foreach循環(huán)顯示姓名foreach stringdispinnames 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 方括號(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ù)組 structstructEx publicintstructDataMember publicvoidstructMethod1 structMethod1實(shí)現(xiàn) 自定義數(shù)據(jù)類(lèi)型可以在其內(nèi)部定義方法無(wú)法實(shí)現(xiàn)繼承屬于值類(lèi)型主要結(jié)構(gòu) structstudent publicintstud id publicstringstud name publicfloatstud marks publicvoidshow 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)型 staticvoidMain string args 聲明一個(gè)值類(lèi)型的整型數(shù)據(jù)類(lèi)型intvalue 130 Console WriteLine 該變量的初始值為 0 value Test value 由于該數(shù)據(jù)類(lèi)型屬于值類(lèi)型 所以將恢復(fù)其初始值Console WriteLine 該變量的值此時(shí)為 0 value staticvoidTest intbyVal intt 20 byVal t 30 將value的初始值傳遞給Test 方法 不反映已經(jīng)改變的val值 而保留原始值 C 的基本數(shù)據(jù)類(lèi)型 staticvoidMain string args DataTypeobjTest newDataType objTest Value 130 傳遞屬于引用類(lèi)型的對(duì)象Test objTest 由于該數(shù)據(jù)類(lèi)型屬于引用類(lèi)型 所以會(huì)考慮新處理的值Console WriteLine 變量的值為 0 objTest Value staticvoidTest DataTypedata intt 20 data Val temp 30 將DataTypeTest的引用傳遞給Test 被傳遞的value在Test 中改變 反映已經(jīng)改變的value值 classDataType publicintValue 引用類(lèi)型和值類(lèi)型 System Object方法 引用類(lèi)型和值類(lèi)型的內(nèi)存分配 值類(lèi)型存儲(chǔ)在運(yùn)行棧 引用類(lèi)型存儲(chǔ)在托管堆ApparelmyApparel newApparel ApparelmyApparel1 myApparel ClassApparel publicdoublePrice 250 0 publicstringFabType Syn 棧 托管堆 裝箱與拆箱 裝箱即將值類(lèi)型轉(zhuǎn)換為引用intage 17 ObjectrefAge age拆箱即將引用類(lèi)型轉(zhuǎn)換為值類(lèi)型 intnewAge int refAge doublenewAge double refAge 錯(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 條件 只能是bool類(lèi)型的值 選擇結(jié)構(gòu) switch cotton case COTTON case cotton break case值3 case值4 break switch case 表達(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類(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) do while循環(huán) do while循環(huán)與while循環(huán)類(lèi)似 二者區(qū)別在于do while循環(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ǔ)句 foreach循環(huán)2 1 foreach循環(huán)用于遍歷整個(gè)集合或數(shù)組語(yǔ)法 foreach 數(shù)據(jù)類(lèi)型元素 變量 in集合或者數(shù)組 語(yǔ)句 foreach循環(huán)2 2 staticvoidMain string args 存放字母的個(gè)數(shù)intLetters 0 存放數(shù)字的個(gè)數(shù)intDigits 0 存放標(biāo)點(diǎn)符號(hào)的個(gè)數(shù)intPunctuations 0 用戶(hù)提供的輸入stringinstr Console WriteLine 請(qǐng)輸入一個(gè)字符串 instr Console ReadLine 聲明foreach循環(huán)以遍歷輸入的字符串中的每個(gè)字符 foreach charchininstr 檢查字母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ì)數(shù)器設(shè)置初始值 接受輸入 對(duì)輸入的每一個(gè)字符都進(jìn)行循環(huán) 使用了所有輸入的字符之后 循環(huán)自動(dòng)終止 usingSystem publicclassWriteTest publicstaticvoidMain int array 1 2 3 4 5 foreach intiteminarray Console WriteLine item usingSystem publicclassWriteTest publicstaticvoidMain int array 1 2 3 4 5 foreach intiteminarray 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 defineCLIENT defineDEBUGusingSystem publicclassMyApp publicstaticvoidMain ifDEBUG INHOUSE warningDebuginon elifDEBUG CLIENT errorDebugnotallowedinClientCode endif 控制臺(tái)輸入和輸出 數(shù)據(jù)輸入 Read ReadLine Console Read 方法Console Read方法用來(lái)從控制臺(tái)讀取一個(gè)字符 其定義如下 PublicstaticintRead Read方法返回所讀取的字符的Unicode編碼值 注意 Read方法的返回變量是32位的整數(shù) 如果需要得到輸入的字符 則必須通過(guò)數(shù)據(jù)類(lèi)型的顯式轉(zhuǎn)換才能得到相應(yīng)的字符 控制臺(tái)輸入和輸出 Console Read ReadTest csusingSystem publicclassReadTest publicstaticvoidMain inti charch i Console Read ch char i 顯式類(lèi)型轉(zhuǎn)換Console WriteLine i Console WriteLine ch 運(yùn)行結(jié)果 A65A 控制臺(tái)輸入和輸出 Console ReadLine 方法Console ReadLine方法用來(lái)從控制臺(tái)讀取一行字符 定義如下 PublicstaticstringReadLine Read方法返回所讀取一行字符的字符串 一般情況下 一行輸入是指從輸入一個(gè)字符開(kāi)始 遇到回車(chē)符號(hào)為止 控制臺(tái)輸入和輸出 ReadLine csusingSystem usingSystem Globalization publicclassReadTest publicstaticvoidMain inti doubled stringstr 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é)果 12341234123 456123 456 控制臺(tái)輸入和輸出 數(shù)據(jù)輸出 WriteWriteLine Console Write 方法Console Write方法用來(lái)向控制臺(tái)輸出一個(gè)字符 但控制臺(tái)的光標(biāo)不會(huì)移到下一行 其定義如下 publicstaticvoidWrite XXXvalue publicstaticvoidWrite stringformat objecto1 注意 格式化format同格式化函數(shù)Format中的格式化串類(lèi)似 其格式如下 N M formatstring 其中 字符N表示輸出變量的序號(hào) M表示輸入變量在控制臺(tái)中所占的字符空間 如果這個(gè)數(shù)字為負(fù)數(shù) 則按照左對(duì)齊的方式輸出 若為正數(shù) 則按照右對(duì)齊方式輸出 控制臺(tái)輸入和輸出 WriteTest csusingSystem publicclassWriteTest publicstaticvoidMain inti 32767 doubled 456 56789 由控制臺(tái) 按照十進(jìn)制輸出整數(shù)及浮點(diǎn)數(shù)Console Write i 0 x 0 8 X td 1 10 F3 i d 由控制臺(tái) 按照十六進(jìn)制輸出整數(shù)Console Write i 0 x 0 8 X td 1 10 F3 i d 輸出結(jié)果 i 0 x7FFFd 456 568i 0 x7FFFd 456 568 控制臺(tái)輸入和輸出 Console WriteLine 方法Console WriteLine方法用來(lái)向控制臺(tái)輸出一行字符 即WriteLine方法在輸出信息之后 在信息的尾部自動(dòng)添加 r n 字符 表示回車(chē)換行 publicstaticvoidWriteLine XXXvalue publicstaticvoidWriteLine stringformat objecto1 注意 格式化format同WriteLine中的格式化參數(shù)完全一樣 控制臺(tái)輸入和輸出 WriteLine csusingSystem publicclassWriteTest publicstaticvoidMain inti 32767 doubled 456 56789 格式化輸出Console WriteLine i 0 x 0 8 X td 1 10 F3 i d Console WriteLine i 0 x 0 8 X td 1 10 F3 i d Console WriteLine i 0 x 0 8 D td 1 10 C3 i d 輸出結(jié)果 i 0 x7FFFd 456 568i 0 x7FFFd 456 568i 32767d 456 568 第3章C 面向?qū)ο笤O(shè)計(jì) 結(jié)構(gòu)程序設(shè)計(jì)的不足 數(shù)據(jù)與方法分離 voidSpeedUp int doublespeed 0 結(jié)構(gòu)程序設(shè)計(jì)的不足 代碼不能重用 voidmain intdoorN car1 2 intcolor car1 0 intspeed car1 100 printf d d d n doorN car1 color car1 speed car1 intdoorN car2 4 intcolor car2 1 intspeed car2 80 printf d d d n doorN car2 color car2 speed car2 C 的面向?qū)ο筇匦?所有東西都是對(duì)象 變量和方法的集合 初級(jí)特性 OO最基本的概念 即類(lèi)和對(duì)象 中級(jí)特性 OO最核心的概念 即封裝 繼承和多態(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)的 classCar publicintdoorN publicintcolor publicintspeed publicvoidSpeedUp speed 10 classMyApp staticvoidMain Carcar1 car1 doorN 2 car1 color 0 car1 speed 100 Carcar2 car2 doorN 4 car2 color 1 car2 speed 80 publicdoublespeed 面向?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 2 1類(lèi)的定義類(lèi)使用class關(guān)鍵字聲明 采用的形式為 類(lèi)修飾符 class類(lèi)名稱(chēng) 基類(lèi)以及實(shí)現(xiàn)的接口列表 類(lèi)體 類(lèi) 對(duì)象和引用的聲明 聲明一個(gè)類(lèi) 訪問(wèn)修飾字class類(lèi)名 變量聲明 方法聲明 classStudent longid 學(xué)號(hào)chargender 性別intclassID 班級(jí)號(hào) 注意不能用class作屬性名voidChangeClass intaClassID 更改班級(jí) 聲明一個(gè)對(duì)象引用 類(lèi)名引用名Studentstudent 創(chuàng)建一個(gè)對(duì)象 new類(lèi)構(gòu)造函數(shù)student newStudent 如果缺少這一步編譯器會(huì)報(bào)錯(cuò)使用對(duì)象 引用名 變量名 方法名 參數(shù) student id 200328013203194 引用與對(duì)象舉例 引用類(lèi)似于C 中的對(duì)象指針 但又有區(qū)別 在C 中 引用 是指向一個(gè)對(duì)象在內(nèi)存中的位置 在本質(zhì)上是一種帶有很強(qiáng)的完整性和安全性的限制的指針 當(dāng)聲明某個(gè)類(lèi) 接口或數(shù)組類(lèi)型的一個(gè)變量時(shí) 變量的值總是某個(gè)對(duì)象的引用或者是null引用 指針就是簡(jiǎn)單的地址而已 而引用除了表示地址而外 還是被引用的數(shù)據(jù)對(duì)象的縮影 可以提供其他信息 指針可以有 運(yùn)算 引用不可以運(yùn)算 3 1 2類(lèi)的成員1 類(lèi)的成員分類(lèi)常量 表示與該類(lèi)相關(guān)聯(lián)的常量值 字段 即該類(lèi)的變量 類(lèi)型 用于表示一些類(lèi)型 它們是該類(lèi)的局部類(lèi)型 方法 用于實(shí)現(xiàn)可由該類(lèi)執(zhí)行的計(jì)算和操作 屬性 用于定義一些命名特性 通過(guò)它來(lái)讀取和寫(xiě)入相關(guān)的特性 事件 用于定義可由該類(lèi)生成的通知 索引器 使該類(lèi)的實(shí)例可按與數(shù)組相同的 語(yǔ)法 方式進(jìn)行索引 運(yùn)算符 用于定義表達(dá)式運(yùn)算符 通過(guò)它對(duì)該類(lèi)的實(shí)例進(jìn)行運(yùn)算 實(shí)例構(gòu)造函數(shù) 用于規(guī)定在初始化該類(lèi)的實(shí)例時(shí)需要做些什么 析構(gòu)函數(shù) 用于規(guī)定在永久地放棄該類(lèi)的一個(gè)實(shí)例之前需要做些什么 靜態(tài)構(gòu)造函數(shù) 用于規(guī)定在初始化該類(lèi)自身時(shí)需要做些什么 publicclassFurniture constdoublesalesTax 065 privatedoublepurchPrice privatestringvendor inventoryID publicFurniture stringvendor stringinventID doublepurchPrice this vendor vendor this inventoryID inventID this purchPrice purchPrice publicstringMyVendor get returnvendor publicdoubleCalcSalesTax doublesalePrice returnsalePrice salesTax 字段 構(gòu)造函數(shù) 成員屬性 方法 2 類(lèi)成員的可訪問(wèn)性 類(lèi)或結(jié)構(gòu)的默認(rèn)訪問(wèn)類(lèi)型是internal 類(lèi)中所有的成員 默認(rèn)均為private classFurniture constdoublesalesTax 065 privatedoublepurchPrice privatestringvendor inventoryID publicFurniture stringvendor stringinventID doublepurchPrice this vendor vendor this inventoryID inventID this purchPrice purchPrice publicstringMyVendor get returnvendor publicdoubleCalcSalesTax doublesalePrice returnsalePrice salesTax classMyApp staticvoidMain Furnituref newFurniture aaa 001 1 2 Console WriteLine f salesTax Console WriteLine Furniture salesTax f purchPrice 10 stringstr f MyVendor 錯(cuò)誤 3 1 3構(gòu)造函數(shù) 構(gòu)造函數(shù)是一種用于對(duì)象初始化的特殊方法 有以下特點(diǎn) 構(gòu)造函數(shù)只能在對(duì)象創(chuàng)建時(shí)調(diào)用 即和new運(yùn)算符一起被調(diào)用 構(gòu)造函數(shù)和類(lèi)具有相同的名字 構(gòu)造函數(shù)可以有0個(gè) 1個(gè)或多個(gè)參數(shù) 構(gòu)造函數(shù)沒(méi)有返回值 每個(gè)類(lèi)至少有一個(gè)構(gòu)造函數(shù) 一個(gè)類(lèi)可以有多個(gè)構(gòu)造函數(shù) 如果沒(méi)有為類(lèi)定義構(gòu)造函數(shù) 系統(tǒng)會(huì)自動(dòng)為其定義一個(gè)缺省的構(gòu)造函數(shù) 缺省構(gòu)造函數(shù)不帶參數(shù) 作用是將實(shí)例變量都清零 一旦為類(lèi)定義了構(gòu)造函數(shù) 則系統(tǒng)不會(huì)再為其定義缺省構(gòu)造函數(shù) C 中構(gòu)造函數(shù)有三種 實(shí)例構(gòu)造 私有構(gòu)造和靜態(tài)構(gòu)造 創(chuàng)建對(duì)象與構(gòu)造函數(shù)類(lèi)聲明后 可以創(chuàng)建類(lèi)的實(shí)例 即對(duì)象 創(chuàng)建類(lèi)的實(shí)例需要使用new關(guān)鍵字 類(lèi)的實(shí)例相當(dāng)于一個(gè)變量 創(chuàng)建類(lèi)實(shí)例的格式如下 類(lèi)名對(duì)象名 new構(gòu)造函數(shù) 參數(shù)類(lèi)表 例如 PointmyPoint newPoint 類(lèi)的構(gòu)造函數(shù)可通過(guò)初始值設(shè)定項(xiàng)來(lái)調(diào)用基類(lèi)的構(gòu)造函數(shù) 例如 publicStudent stringno stringname charsex intage base name sex age 類(lèi)的構(gòu)造函數(shù)也可通過(guò)關(guān)鍵字this調(diào)用同一個(gè)類(lèi)的另一個(gè)構(gòu)造函數(shù) 例如 publicPoint this 0 20 構(gòu)造函數(shù)舉例 classStudent longid chargender intclassID publicStudent this 0 F 0 publicStudent longaID charaGender intaClassID id aID gender aGender classID aClassID 私有構(gòu)造函數(shù) 在某些特殊的情況下 使用私有構(gòu)造函數(shù)能夠達(dá)到意想不到的效果 比如 想建立這樣一個(gè)類(lèi)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《電工》高級(jí)練習(xí)題(含參考答案)
- 細(xì)節(jié)管理提升護(hù)理質(zhì)量
- AI大模型賦能港口設(shè)施數(shù)字運(yùn)維一體化智能解決方案
- 重癥監(jiān)護(hù)患者夜間睡眠
- 網(wǎng)絡(luò)服務(wù)器配置與管理(微課版) 習(xí)題及答案
- 2025年全民科學(xué)素質(zhì)競(jìng)賽網(wǎng)絡(luò)知識(shí)競(jìng)賽試題庫(kù)及答案(共150題)
- 銷(xiāo)售策劃目的試題及答案
- 河北省張家口市普通高中學(xué)業(yè)水平選擇性模擬考試三模 英語(yǔ)試題(含答案)
- 2025年山東省泰安市東平縣(五四學(xué)制)中考三模歷史試題(含答案)
- 2025【合同范本】租賃合同解除協(xié)議模板
- DB36_T 420-2019 江西省工業(yè)企業(yè)主要產(chǎn)品用水定額(高清無(wú)水印-可復(fù)制)
- 車(chē)間精益改善總結(jié)報(bào)告課件(PPT 19頁(yè))
- 中小學(xué)教育懲戒規(guī)則(試行)全文解讀ppt課件
- TCECS 850-2021 住宅廚房空氣污染控制通風(fēng)設(shè)計(jì)標(biāo)準(zhǔn)
- 《冬病夏治工作指南》
- 布魯克納操作手冊(cè)
- 印度尼西亞煤炭購(gòu)銷(xiāo)合同
- GB∕T 25119-2021 軌道交通 機(jī)車(chē)車(chē)輛電子裝置
- 2022年國(guó)網(wǎng)輸變電工程質(zhì)量通病防治工作要求及技術(shù)措施[1]
- 三年級(jí)美術(shù)下冊(cè)16奇石教學(xué)設(shè)計(jì)1浙美版
- 支氣管分段亞段及及支氣管鏡檢查
評(píng)論
0/150
提交評(píng)論