




已閱讀5頁,還剩425頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第1章C 與NET平臺介紹本章目標(biāo) 了解 NETFramework的結(jié)構(gòu)理解 NETFramework的基本概念CLRJITCTSMSIL了解 NETFramework命名空間了解C 程序的基本結(jié)構(gòu) 1C 語言的由來 在過去的二十年里 C和C 已經(jīng)成為在商業(yè)軟件的開發(fā)領(lǐng)域中使用最廣泛的語言 它們?yōu)槌绦騿T提供了十分靈活的操作 不過同時也犧牲了一定的開發(fā)效率 與VB等語言相比 同等級別的C C 應(yīng)用程序往往需要更長時間來開發(fā) 由于C C 語言的復(fù)雜性 許多程序員都試圖尋找一種新的語言 希望能在功能與效率之間找到一個更為理想的權(quán)衡點 VB以犧牲靈活性的代價來提高效率 可是這些靈活性正是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 Csharp 是對這一問題的解決方案 C 是一種新的 面向?qū)ο蟮木幊陶Z言 它使得程序員可以快速地編寫各種基于Microsoft NET平臺的應(yīng)用程序 Microsoft NET提供了一系列的工具和服務(wù)來最大程度地開發(fā)利用計算與通訊領(lǐng)域 C 語言的特點 C 語言是Microsoft發(fā)布的一種全新的編程語言 是其 Net戰(zhàn)略的一枚重要棋子 C 語言是面向?qū)ο蟮?現(xiàn)代的編程語言 用C 編寫的應(yīng)用程序可以充分利用 Net的框架體系帶來的優(yōu)點 既可以用來編寫基于通用網(wǎng)絡(luò)協(xié)議的Internet服務(wù)軟件 也可以編寫各種數(shù)據(jù)庫 網(wǎng)絡(luò)服務(wù)應(yīng)用程序和Windows窗口界面程序 C 繼承了C C 的優(yōu)點和靈活性 能夠充分利用OS系統(tǒng)的底層功能 同時又具備了完全的面向?qū)ο筇匦?可以讓初學(xué)者直接了解面向?qū)ο缶幊痰母鞣N概念 學(xué)習(xí)現(xiàn)代的編程思想和手段 2 NET代碼的編譯語言特定的編譯器和運行庫 代碼被執(zhí)行 IL 元數(shù)據(jù) CLR IL和CLR的使用IntermediateLanguageCommonLanguageRuntime 編譯執(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 clientlib dll client exe module IL語言范例 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 通用語言運行時CLR NET的語言互操作性 不同語言編寫的代碼可互相調(diào)用C 的平臺移植性 框架JIT編譯器 JustInTime 即時編譯器 3 NETFramework簡介 NETFramework類似于JVM NETFramework兩個主要組件 通用語言運行時 CLR 統(tǒng)一的類庫集 NET的類庫 線程文件輸入 輸出 I O 數(shù)據(jù)庫支持XML解析數(shù)據(jù)結(jié)構(gòu) NETFramework的體系結(jié)構(gòu) VisualStudio NET CLR通用語言運行時 CLR BaseClassLibrary IO Drawing Threading DataandXML XMLWebservices WindowsForms WebForms 通用語言規(guī)范 CLS VB C C JScript 操作系統(tǒng) NetFramework類庫 FCL CLS和CTS 通用語言規(guī)范CLSCommonLanguageSpecification規(guī)定所有 NET語言都應(yīng)遵循的規(guī)則生成可與其他語言互操作的應(yīng)用程序通用類型系統(tǒng) CommonTypeSystem CTS 包含標(biāo)準(zhǔn)數(shù)據(jù)類型包含準(zhǔn)則集 CLS CTS和MSIL緊密配合以實現(xiàn)語言互操作性 命名空間就像在文件系統(tǒng)中一個文件夾容納多個文件一樣 可以看作某些類的一個容器 通過把類放入命名空間可以把相關(guān)的類組織起來 并且可以避免命名沖突 命名空間既用作程序的 內(nèi)部 組織系統(tǒng) 也用作 外部 組織系統(tǒng) 一種向其他程序公開自己擁有的程序元素的方法 使用命名空間 using類似 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)用程序 單擊 開始 程序 MicrosoftVisualStudio NET2005 MicrosoftVisualStudio NET2005 此時將打開VS NET2005的起始頁要創(chuàng)建C 控制臺應(yīng)用程序 請從列表中選擇 創(chuàng)建建 項目 此時將打開 新建項目 窗口選擇 VisualC 項目 作為項目類型 選擇 控制臺應(yīng)用程序 作為模板 C 模板 Console WriteLine HelloWorld 輸出 HelloWorld csprojAssemblyInfo csProgram cs HelloWorld 應(yīng)用程序文件 編譯和執(zhí)行C 應(yīng)用程序 要生成C 項目 請從菜單中選擇 生成 生成解決方案 該過程將編譯項目中包括的所有文件 編譯結(jié)果顯示在 輸出 窗口中如果結(jié)果顯示 生成 1成功或最新 0失敗 0被跳過 則說明已經(jīng)成功生成 然后即可交付該應(yīng)用程序 要運行剛才生成的應(yīng)用程序 請從菜單中選擇 調(diào)試 開始執(zhí)行 不調(diào)試 輸出結(jié)果顯示在VS NET控制臺窗口中 C 應(yīng)用程序文件夾結(jié)構(gòu) VisualStudio NET2005創(chuàng)建一個與項目同名的文件夾 此處為 HelloWorld 該文件夾包含項目文件 HelloWorld csproj 和其他關(guān)聯(lián)文件每個新項目都創(chuàng)建了bin obj和Properties三個文件夾 Bin和obj這兩個文件夾下都有一個Debug子目錄 其中包含可執(zhí)行文件HelloWorld exe在 解決方案資源管理器 中啟用 顯示所有文件 選項 可查看 HelloWorld 項目的結(jié)構(gòu) 這是用C 編寫的一個簡單的HelloWorld程序usingSystem namespaceNotepad classHelloWorld staticvoidMain Console WriteLine HelloWorld 聲明HelloWorld類 描述代碼的注釋 HelloWorld程序 程序入口點 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個或者多個類 4 所有語句都以分號 結(jié)束 C 語言基礎(chǔ) 第2章 目標(biāo) 在C 中定義變量和常量使用C 中的基本數(shù)據(jù)類型理解裝箱和拆箱的概念使用C 中的運算符 選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)定義和使用數(shù)組 了解結(jié)構(gòu)和枚舉了解C 中的預(yù)處理指令理解C 中常用的字符串處理方法 第一個C 程序 HelloWorld usingSystem classHelloWorld staticvoidMain Console WriteLine Hello World HelloWorld cs 第一個C 程序 HelloWorld 1 usingSystem 第1行 using關(guān)鍵字用來引用 NET框架類庫中的資源通常在程序文件的開頭使用如果程序中需要多種資源 可以使用多次usingSystem命名空間System命名空間提供了構(gòu)建應(yīng)用程序所需的系統(tǒng)統(tǒng)能的訪問 第一個C 程序 HelloWorld 2 classHelloWorld3 8 第2 3 8行 類在C 或其他面向?qū)ο笳Z言中 需要編寫類使用關(guān)鍵字class定義一個類 類的內(nèi)容放在一對 中示例中定義了一個名為HelloWorld的類 第一個C 程序 HelloWorld 4 staticvoidMain 5 7 第4 5 7行 Main方法Main方法是應(yīng)用程序的入口點 編譯器將由該處開始執(zhí)行程序方法體也放在一對 中每個C 的應(yīng)用程序都必須包含Main方法 4 staticvoidMain 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í)行的指令語句之間用 分隔 編譯器通過分號來區(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ū)ο蟮姆椒ㄊ褂命c取符 來完成 字符串用雙引號 表示字符串 Hello World 是WriteLine方法的參數(shù) 表示屏幕輸出的內(nèi)容 第一個C 程序 HelloWorld 系統(tǒng)預(yù)定義類型 系統(tǒng)預(yù)定義類型 字面量 int intiMax int MaxValue intpVal int Parse 100 shorti16 50 inti32 i16 i16 i32 錯誤i16 short i32 decimaldecimaliRate 3 9834M iRate decimal Round iRate 2 四舍五入iRate decimal Remainder 512 0M 51 0M boolboolbt bool 1 錯誤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 字符串操作索引字符串中的單個字符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 比較兩個字符串的值是否相等ToLower 將字符串轉(zhuǎn)換成小寫形式IndexOf 查找某個字符在字符串中的位置SubString 從字符串中截取子字符串Join 連接字符串Split 分割字符串Trim 去掉字符串兩邊的空格 實例 將一文件名的擴(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 請輸入你的郵箱 email Console ReadLine Console WriteLine 你的郵箱是 0 email 需實現(xiàn)的功能 1 輸入yes時 程序循環(huán)執(zhí)行2 兼容以下各種形式y(tǒng)es YES yes YeS 3 提取郵箱的用戶名 usingSystem usingSystem Collections Generic usingSystem Linq usingSystem Text namespace 011 classProgram staticvoidMain string args while 1 stringemail 電子郵件地址Console WriteLine 請輸入你的郵箱 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 輸入一個字符串 輸出每個單詞 重新用下劃線連接輸出 使用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類的Format 方法用來格式化字符串 關(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這是你的個人檔案 Console WriteLine record 參數(shù)與WritLine 方法相似 Format 的語法小結(jié) stringmyString string Format 格式字符串 參數(shù)列表 stringmyString string Format 0 乘以 1 等于 2 2 3 2 3 格式字符串 代表 參數(shù)列表 2乘以3等于6 包括占位符 x 小結(jié) 補充下劃線處的占位符 輸出五個成語 stringyi 一 stringer 二 stringsan 三 stringword string Format 獨 無 心 意 垂涎 尺 略知 舉 反 yi er san Console WriteLine word stringyi 一 stringer 二 stringsan 三 stringword string Format 獨 0 無 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 聲明布爾型 字符串型 整型 短整型和浮點型變量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 浮點值 n3 變量中存儲的值取決于該變量的類型 常量 staticvoidMain string args PI常量PIconstfloat pi 3 1415169F 由地球引力引起的加速度常量 單位為cm s sconstfloat gravity 980 鐘擺的長度intlength 60 鐘擺的周期doubleperiod 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ù)組元素賦值都可以在聲明數(shù)組時或在程序的后面階段中進(jìn)行語法 數(shù)據(jù)類型 數(shù)組名稱 new類型 n int arrayHere newint 6 數(shù)組 staticvoidMain string args intcount Console WriteLine 請輸入準(zhǔn)備登機(jī)的乘客人數(shù) count int Parse Console ReadLine 聲明一個存放姓名的字符串?dāng)?shù)組 其長度等于乘客人數(shù)string names newstring count 用一個for循環(huán)來接受姓名for inti 0 i count i Console WriteLine 請輸入第 0 個乘客的姓名 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)部 每個數(shù)組的長度可以不同 就像一個鋸齒形狀 1 不規(guī)則數(shù)組的聲明語法形式 type arrayName 方括號 的個數(shù)與數(shù)組的維數(shù)相關(guān) 例如 int jagged jagged是一個int類型的二維不規(guī)則數(shù)組 2 創(chuàng)建數(shù)組對象以二維不規(guī)則數(shù)組為例 3 不規(guī)則數(shù)組 structstructEx publicintstructDataMember publicvoidstructMethod1 structMethod1實現(xiàn) 自定義數(shù)據(jù)類型可以在其內(nèi)部定義方法無法實現(xiàn)繼承屬于值類型主要結(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ì)信息都可以作為一個整體進(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ù)類型 staticvoidMain string args 聲明一個值類型的整型數(shù)據(jù)類型intvalue 130 Console WriteLine 該變量的初始值為 0 value Test value 由于該數(shù)據(jù)類型屬于值類型 所以將恢復(fù)其初始值Console WriteLine 該變量的值此時為 0 value staticvoidTest intbyVal intt 20 byVal t 30 將value的初始值傳遞給Test 方法 不反映已經(jīng)改變的val值 而保留原始值 C 的基本數(shù)據(jù)類型 staticvoidMain string args DataTypeobjTest newDataType objTest Value 130 傳遞屬于引用類型的對象Test objTest 由于該數(shù)據(jù)類型屬于引用類型 所以會考慮新處理的值Console WriteLine 變量的值為 0 objTest Value staticvoidTest DataTypedata intt 20 data Val temp 30 將DataTypeTest的引用傳遞給Test 被傳遞的value在Test 中改變 反映已經(jīng)改變的value值 classDataType publicintValue 引用類型和值類型 System Object方法 引用類型和值類型的內(nèi)存分配 值類型存儲在運行棧 引用類型存儲在托管堆ApparelmyApparel newApparel ApparelmyApparel1 myApparel ClassApparel publicdoublePrice 250 0 publicstringFabType Syn 棧 托管堆 裝箱與拆箱 裝箱即將值類型轉(zhuǎn)換為引用intage 17 ObjectrefAge age拆箱即將引用類型轉(zhuǎn)換為值類型 intnewAge int refAge doublenewAge double refAge 錯誤 要具有相同類型 運算符和表達(dá)式 運算符和表達(dá)式 運算符和表達(dá)式 運算符和表達(dá)式 運算符和表達(dá)式9 6 賦值運算符 變量 表達(dá)式 例如 身高 177 5 體重 78 性別 m 運算符和表達(dá)式9 7 一元運算符 Variable 相當(dāng)于Variable Variable 1 Variable 相當(dāng)于Variable Variable 1 運算符和表達(dá)式 運算符和表達(dá)式 C 運算符的優(yōu)先級 選擇結(jié)構(gòu) 語法 if else 選擇結(jié)構(gòu)用于根據(jù)表達(dá)式的值執(zhí)行語句 if else 條件 只能是bool類型的值 選擇結(jié)構(gòu) switch cotton case COTTON case cotton break case值3 case值4 break switch case 表達(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類型的值 while循環(huán)反復(fù)執(zhí)行指定的語句 直到指定的條件為真語法 while 條件 語句 break語句可用于退出循環(huán)continue語句可用于跳過當(dāng)前循環(huán)并開始下一循環(huán) while循環(huán) do while循環(huán) do while循環(huán)與while循環(huán)類似 二者區(qū)別在于do while循環(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 初始值 條件 增 減 語句 foreach循環(huán)2 1 foreach循環(huán)用于遍歷整個集合或數(shù)組語法 foreach 數(shù)據(jù)類型元素 變量 in集合或者數(shù)組 語句 foreach循環(huán)2 2 staticvoidMain string args 存放字母的個數(shù)intLetters 0 存放數(shù)字的個數(shù)intDigits 0 存放標(biāo)點符號的個數(shù)intPunctuations 0 用戶提供的輸入stringinstr Console WriteLine 請輸入一個字符串 instr Console ReadLine 聲明foreach循環(huán)以遍歷輸入的字符串中的每個字符 foreach charchininstr 檢查字母if char IsLetter ch Letters 檢查數(shù)字if char IsDigit ch Digits 檢查標(biāo)點符號if char IsPunctuation ch Punctuations Console WriteLine 字母個數(shù)為 0 Letters Console WriteLine 數(shù)字個數(shù)為 0 Digits Console WriteLine 標(biāo)點符號個數(shù)為 0 Punctuations 為所有計數(shù)器設(shè)置初始值 接受輸入 對輸入的每一個字符都進(jìn)行循環(huán) 使用了所有輸入的字符之后 循環(huán)自動終止 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 編譯器在詞法分析階段讀取的語句 這些語句可以指示編譯器包含或不包含某些代碼 甚至可以根據(jù)預(yù)處理指令的值終止編譯 預(yù)處理指令由字符 標(biāo)識 并且字符 必須是該行的第一個非空字符 預(yù)處理指令最常見的三個用途是 完成條件編譯 增加診斷來報告錯誤和警告 定義代碼域 C 的預(yù)處理指令2 2 defineCLIENT defineDEBUGusingSystem publicclassMyApp publicstaticvoidMain ifDEBUG INHOUSE warningDebuginon elifDEBUG CLIENT errorDebugnotallowedinClientCode endif 控制臺輸入和輸出 數(shù)據(jù)輸入 Read ReadLine Console Read 方法Console Read方法用來從控制臺讀取一個字符 其定義如下 PublicstaticintRead Read方法返回所讀取的字符的Unicode編碼值 注意 Read方法的返回變量是32位的整數(shù) 如果需要得到輸入的字符 則必須通過數(shù)據(jù)類型的顯式轉(zhuǎn)換才能得到相應(yīng)的字符 控制臺輸入和輸出 Console Read ReadTest csusingSystem publicclassReadTest publicstaticvoidMain inti charch i Console Read ch char i 顯式類型轉(zhuǎn)換Console WriteLine i Console WriteLine ch 運行結(jié)果 A65A 控制臺輸入和輸出 Console ReadLine 方法Console ReadLine方法用來從控制臺讀取一行字符 定義如下 PublicstaticstringReadLine Read方法返回所讀取一行字符的字符串 一般情況下 一行輸入是指從輸入一個字符開始 遇到回車符號為止 控制臺輸入和輸出 ReadLine csusingSystem usingSystem Globalization publicclassReadTest publicstaticvoidMain inti doubled stringstr str Console ReadLine 由控制臺輸入整數(shù)字符串i int Parse str 整數(shù)字符串轉(zhuǎn)換為整數(shù)Console WriteLine i str Console ReadLine 由控制臺輸入浮點字符串d double Parse str 浮點字符串轉(zhuǎn)換為浮點數(shù)Console WriteLine d 運行結(jié)果 12341234123 456123 456 控制臺輸入和輸出 數(shù)據(jù)輸出 WriteWriteLine Console Write 方法Console Write方法用來向控制臺輸出一個字符 但控制臺的光標(biāo)不會移到下一行 其定義如下 publicstaticvoidWrite XXXvalue publicstaticvoidWrite stringformat objecto1 注意 格式化format同格式化函數(shù)Format中的格式化串類似 其格式如下 N M formatstring 其中 字符N表示輸出變量的序號 M表示輸入變量在控制臺中所占的字符空間 如果這個數(shù)字為負(fù)數(shù) 則按照左對齊的方式輸出 若為正數(shù) 則按照右對齊方式輸出 控制臺輸入和輸出 WriteTest csusingSystem publicclassWriteTest publicstaticvoidMain inti 32767 doubled 456 56789 由控制臺 按照十進(jìn)制輸出整數(shù)及浮點數(shù)Console Write i 0 x 0 8 X td 1 10 F3 i d 由控制臺 按照十六進(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 控制臺輸入和輸出 Console WriteLine 方法Console WriteLine方法用來向控制臺輸出一行字符 即WriteLine方法在輸出信息之后 在信息的尾部自動添加 r n 字符 表示回車換行 publicstaticvoidWriteLine XXXvalue publicstaticvoidWriteLine stringformat objecto1 注意 格式化format同WriteLine中的格式化參數(shù)完全一樣 控制臺輸入和輸出 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è)計 結(jié)構(gòu)程序設(shè)計的不足 數(shù)據(jù)與方法分離 voidSpeedUp int doublespeed 0 結(jié)構(gòu)程序設(shè)計的不足 代碼不能重用 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ū)ο筇匦?所有東西都是對象 變量和方法的集合 初級特性 OO最基本的概念 即類和對象 中級特性 OO最核心的概念 即封裝 繼承和多態(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)的 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è)計 封裝 代碼重用 3 2類與對象 類 C 所有的代碼都是在某一個類中 因此不可能在類之外的全局區(qū)域有變量和方法 對象 C 中的對象相當(dāng)于一塊內(nèi)存區(qū)域 保存對象特有的類中所定義的數(shù)據(jù) 引用 C 中對于對象的操作全部通過引用進(jìn)行 3 2 1類的定義類使用class關(guān)鍵字聲明 采用的形式為 類修飾符 class類名稱 基類以及實現(xiàn)的接口列表 類體 類 對象和引用的聲明 聲明一個類 訪問修飾字class類名 變量聲明 方法聲明 classStudent longid 學(xué)號chargender 性別intclassID 班級號 注意不能用class作屬性名voidChangeClass intaClassID 更改班級 聲明一個對象引用 類名引用名Studentstudent 創(chuàng)建一個對象 new類構(gòu)造函數(shù)student newStudent 如果缺少這一步編譯器會報錯使用對象 引用名 變量名 方法名 參數(shù) student id 200328013203194 引用與對象舉例 引用類似于C 中的對象指針 但又有區(qū)別 在C 中 引用 是指向一個對象在內(nèi)存中的位置 在本質(zhì)上是一種帶有很強的完整性和安全性的限制的指針 當(dāng)聲明某個類 接口或數(shù)組類型的一個變量時 變量的值總是某個對象的引用或者是null引用 指針就是簡單的地址而已 而引用除了表示地址而外 還是被引用的數(shù)據(jù)對象的縮影 可以提供其他信息 指針可以有 運算 引用不可以運算 3 1 2類的成員1 類的成員分類常量 表示與該類相關(guān)聯(lián)的常量值 字段 即該類的變量 類型 用于表示一些類型 它們是該類的局部類型 方法 用于實現(xiàn)可由該類執(zhí)行的計算和操作 屬性 用于定義一些命名特性 通過它來讀取和寫入相關(guān)的特性 事件 用于定義可由該類生成的通知 索引器 使該類的實例可按與數(shù)組相同的 語法 方式進(jìn)行索引 運算符 用于定義表達(dá)式運算符 通過它對該類的實例進(jìn)行運算 實例構(gòu)造函數(shù) 用于規(guī)定在初始化該類的實例時需要做些什么 析構(gòu)函數(shù) 用于規(guī)定在永久地放棄該類的一個實例之前需要做些什么 靜態(tài)構(gòu)造函數(shù) 用于規(guī)定在初始化該類自身時需要做些什么 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 類成員的可訪問性 類或結(jié)構(gòu)的默認(rèn)訪問類型是internal 類中所有的成員 默認(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 錯誤 3 1 3構(gòu)造函數(shù) 構(gòu)造函數(shù)是一種用于對象初始化的特殊方法 有以下特點 構(gòu)造函數(shù)只能在對象創(chuàng)建時調(diào)用 即和new運算符一起被調(diào)用 構(gòu)造函數(shù)和類具有相同的名字 構(gòu)造函數(shù)可以有0個 1個或多個參數(shù) 構(gòu)造函數(shù)沒有返回值 每個類至少有一個構(gòu)造函數(shù) 一個類可以有多個構(gòu)造函數(shù) 如果沒有為類定義構(gòu)造函數(shù) 系統(tǒng)會自動為其定義一個缺省的構(gòu)造函數(shù) 缺省構(gòu)造函數(shù)不帶參數(shù) 作用是將實例變量都清零 一旦為類定義了構(gòu)造函數(shù) 則系統(tǒng)不會再為其定義缺省構(gòu)造函數(shù) C 中構(gòu)造函數(shù)有三種 實例構(gòu)造 私有構(gòu)造和靜態(tài)構(gòu)造 創(chuàng)建對象與構(gòu)造函數(shù)類聲明后 可以創(chuàng)建類的實例 即對象 創(chuàng)建類的實例需要使用new關(guān)鍵字 類的實例相當(dāng)于一個變量 創(chuàng)建類實例的格式如下 類名對象名 new構(gòu)造函數(shù) 參數(shù)類表 例如 PointmyPoint newPoint 類的構(gòu)造函數(shù)可通過初始值設(shè)定項來調(diào)用基類的構(gòu)造函數(shù) 例如 publicStudent stringno stringname charsex intage base name sex age 類的構(gòu)造函數(shù)也可通過關(guān)鍵字this調(diào)用同一個類的另一個構(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á)到意想不到的效果 比如 想建立這樣一個類
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國南水北調(diào)工程
- 中國剪紙英語教學(xué)課件
- 廣西北海市銀海區(qū)2025屆八年級英語第二學(xué)期期中達(dá)標(biāo)檢測試題含答案
- 感恩教育班會
- 制動器課件教學(xué)課件
- 制作環(huán)保課件
- 腫瘤護(hù)理個案匯報
- 安全管理技能培訓(xùn)
- 導(dǎo)醫(yī)素質(zhì)要求培訓(xùn)
- 中國傳統(tǒng)運動療法課件
- 2025年重慶市中考道德與法治試卷真題(含標(biāo)準(zhǔn)答案)
- 2025年北京昌平區(qū)東小口鎮(zhèn)城市協(xié)管員招聘題庫帶答案分析
- 10kV供配電系統(tǒng)電氣設(shè)備改造 投標(biāo)方案
- 婦女兒童之家管理制度
- 2025山西大地環(huán)境投資控股有限公司校園招聘13人筆試參考題庫附帶答案詳解
- 江蘇省揚州市江都區(qū)城區(qū)2025屆八年級物理第二學(xué)期期末聯(lián)考試題含解析
- 《防爆安全管理》課件
- 【課件】2024年全國I、II卷新高考讀后續(xù)寫+課件-2025屆高三英語一輪復(fù)習(xí)
- 醫(yī)保村醫(yī)政策培訓(xùn)
- 郵政社招筆試考試歷年真題及答案
- 《結(jié)締組織病本》課件
評論
0/150
提交評論