




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C#編程基礎,講師:蘇 坤 QQ:35651998 ,概念:.net與c# (多語言),.net/dotnet:一般指.Net Framework框架.一種平臺,一種技術. C#(sharp):一種編程語言,可以開發(fā)基于.net平臺的應用. (*) Java即是一種技術又是一種編程語言,.net都能干什么,桌面應用程序 Winform Internet應用程序 ASP.NET 手機開發(fā) wp7 C/S:客戶機(Client)/服務器模式(Server) qq B/S:瀏覽器(Browser)/服務器模式(Server),.Net開發(fā)學習路線(*),IDE介紹,IDE(Integrated De
2、velopment,集成開發(fā)環(huán)境) Visual Studio 2010 簡介: 一套完整的開發(fā)工具集 用于開發(fā)桌面應用程序、ASP.NET Web 應用程序、XML、Web Service、移動應用程序 為快速開發(fā)提供強大支持,IDE及.Net 的版本(*了解),.Net 1.1,.Net 2.0,.Net3.x,.Net4.x,Visual Studio2003,Visual Studio2005,Visual Studio2008,Visual Studio2010,向下兼容,.Net 1.0,Visual Studio2002,MSDN介紹,MSDN 的全稱是 Microsoft De
3、veloper Network。這是微軟公司面向軟件開發(fā)者的一種信息服務。MSDN 實際上是一個以 Visual Studio 和 Windows 平臺為核心整合的開發(fā)虛擬社區(qū),包括技術文檔、在線電子教程、網絡虛擬實驗室、微軟產品下載(幾乎全部的操作系統(tǒng)、服務器程序、應用程序和開發(fā)程序的正式版和測試版,還包括各種驅動程序開發(fā)包和軟件開發(fā)包)、Blog、BBS、MSDN WebCast、與 CMP 合作的 MSDN 雜志等等一系列服務。,點擊查看msdn百科,Visual Studio介紹1,安裝 setup.exe install.exe autorun 啟動 創(chuàng)建解決方案/項目 認識vs的各
4、部分(菜單/快捷鍵/工具欄/窗口) VisualStudio各個視圖的打開、開發(fā)環(huán)境的重置 C#源文件(類)一般以cs結尾 C#程序的入口是Main函數,在Main中寫代碼就行,暫時不用關心其他部分是什么意思,Visual Studio介紹2,保存項目,打開項目. 交作業(yè)交哪些文件. 作業(yè)的命名格式:蘇坤512.rar 先學習兩句話: Console.WriteLine(Hello,World!); Console.ReadKey(); 每一句話以;號結束 生成程序 運行一下生成的.exe程序 設置字體及行號顯示 創(chuàng)建多個項目 啟動項目設置 項目的加載與卸載,c#中的注釋符,注釋方式: /單行
5、注釋 /* */多行注釋 / /文檔注釋 /,小練習,練習:編程輸出以下內容 自己練習一下三種注釋符: 第一種:單行注釋 以/開頭,后面的就是注釋內容 第二種:多行注釋 以 /*開頭 */結束 之間的是注釋內容 第三種:文檔注釋 在方法或類的上一行輸入 /就會產生,計算機使用基本技巧,常用鍵介紹: Home/End/PageUp/PageDown/Shift/c+h/c+end 一段文字的刪除.(del/backspace) ctrl+a ctrl+kf 學會使用復制粘貼。Ctrl+c/v/x 對話框中的使用 插入、覆蓋模式的困惑。 學會使用Ctrl+Z撤銷上一次操作 ;,()等的的全角半角問
6、題。 出錯:意外的字符 VS窗口的拖拽 遇到異常、報錯不要慌。 目前經常用到的快捷鍵:F5 F6 #region和#endregion,操作系統(tǒng) 一般 Windows,公共語言運行庫 (CLR),VC+.NET,C#,VB.NET,VJ#,.NET Framework 類庫 (FCL),軟件系統(tǒng)依賴關系(*),北京傳智播客教育 ,.Net簡介(*了解),.Net Framework類庫,CLR公共語言運行時,操作系統(tǒng),應用程序,應用程序,操作系統(tǒng),平臺無關:CLR、.Net Framework進行了隔離。Windows、Linux(Mono)、智能手機、Web。學會.Net什么都能開發(fā),知識移
7、植。,更安全、更省心:代碼托管、罕用指針、垃圾回收。,語言無關:VB.Net、C#都調用同樣的類、同樣的方法,VB.Net寫的類C#也可以調用。模糊了語言的差別,.net是如何實現語言無關性的(*),C#,VB.NET,代碼被執(zhí)行,MSIL,CLR,通用語法,計算機不用了解,CLR執(zhí)行IL,C#編譯器,VB.NET編譯器,基本框架類,WinForms,ADO.NET 和 XML 類,.NET Framework,.NET Framework 類庫,ASP.NET,CLS,CLR,CTS,變量1,計算機使用內存來存儲數據. 我們在計算機中存儲數據和客人住旅館很類似.,我們住旅館一般要做以下事情:
8、 1、開房間(單人間、雙人間、總統(tǒng)套間) 2、入住,變量2,要在計算機中存一個數字1000,需要兩句話. int a; /開一個能放數字的空間 a=1000; /把1000放進去. 聲明變量的語法格式: 數據類型 變量名; 賦值: 變量名=值; 可以 a=3.14; 嗎?,變量3,計算機中各式各樣的數據 3 3.14 100 the quick brown fox jumps over the lazy dog 張三 李四 True 2011-3-6,*更多的數據類型,C#中的數據,int: 3 5 100 -10 double: 3.14 10.5 -3.14 -5.0 char : A b
9、 a string : “Zhangsan” “李四” “計算機” “HelloWorld” a decimal:存儲金錢 5.62 decimal d=5.55m; decimal d1=5;,變量的聲明方法,A)數據類型 變量名稱; int age; 變量的賦值 age=18; B)定義時賦值,數據類型 變量名稱=值; int age = 18; C)如果一次要聲明多個相同類型的變量可用逗號分隔. string zsName,lsName; 變量一定要先聲明,再賦值,才能使用. 練習:定義一個變量pi,并把3.14存進去,然后顯示在屏幕上? 想一想下面代碼的輸出結果是? int i=10;
10、Console.WriteLine(i);,變量的命名,命名規(guī)則: 1 必須以“字母”_或符號開頭.-不要以數字開頭 2 后面可以跟任意“字母”、數字、下劃線. 注意: 1)你起的變量名不要與c#系統(tǒng)中的關鍵字重復. 2)在c#中,大小寫是敏感的. 3)同一個變量名不允許重復定義(先這么認為,不嚴謹) 定義變量時,變量名要有意義 C# 變量命名編碼規(guī)范Camel 命名法: 首個單詞的首字母小寫,其余單詞的首字母大寫。 Pascal命名規(guī)范:每一個單詞第一字母都大寫 如果使用到英文單詞的縮寫,全部用大寫!,下面的變量名稱哪些正確?,principal,cost_price,marks_3,$la
11、stname,city,123rate,discount%,zip code,City,int,賦值運算符和賦值表達式,賦值運算符:= a=a+1; 這里的=號是賦值運算符,不是數學義意上的相等. 變量可以重復賦值,一旦給一個變量賦了新值,那么變量中的老值就不復存在了. 右邊代碼的輸出結果:,演示:,定義一個變量存儲客戶的姓名,然后在屏幕上顯示:”你好,某某”. 某某代表客戶的姓名 +號可以連接兩個字符串,這里的“+”號表示連接的意思,練習:,1. 定義3個變量,分別存儲一個人的姓名(張三),年齡(28),和工資(7600.33).然后在屏幕上顯示,我叫XX,今天X歲了,我的工資是XX元. 2
12、. 定義一個變量存儲一個人的年齡(18),然后發(fā)現這個人的年齡不是18歲,要把這個人的年齡修改成20歲(本題體會變量可以被重復多次賦值),最后把這個人的年齡輸出到屏幕上?,變量練習,3.定義四個變量,分別存儲一個人的姓名、性別、年齡、電話。然后打印在屏幕上 (我叫X,我今年 X歲了,我是X生,我的電話是XX) 4.在屏幕上輸出:我的手機是philips 型號:998 價格:1500元 重量:0.3kg 請定義變量存存儲上面的值,并顯示在屏幕上. 5.定義兩個變量如:a b分別賦值為10和5,寫程序交換兩個變量的值,字符串類型,再學習一句話:Console.ReadLine(); 用于接收用戶的
13、輸入.要定義一個字符串變量來接收變存儲用戶輸入的值. 1.練習:問用戶喜歡吃什么水果,假如用戶輸入”蘋果”,則顯示”哈哈,這么巧呀,我也喜歡吃蘋果” 2.練習:請用戶輸入姓名,然后在屏幕上顯示“你好,XXX. XXX為用戶剛剛輸入的姓名.,字符串中的轉義,能在字符串中輸出雙引號嗎? 在屏幕上顯示: c#中的字符串用” ”號包含起來 +一個字符,組成轉譯字符.一般用于表示特殊符號 字在字符串前面表示不轉譯 常用的轉譯符:n b t ”,算術運算符及算術表達式,算術運算符: + - * / %(取余數 取模) 算術表達式:由算術運算符連接起來的式子.如:1+1 a-b(變量ab前面已聲明并賦初值)
14、 演示:某學生三門課成績?yōu)?語文:90 數學:80 英語:91,編程求總分和平均分. 優(yōu)先級:先乘除,后加減,有括號先算括號里的,相同級別的從左至右運算 5+3*2 小括號可以無限制的套用,但一定要成對出現.,練習,練習1:定義兩個數分別為10和20,打印出兩個數的和。 練習2:計算半徑為5的圓的面積并打印出來. 練習3:某商店T恤的價格為35元/件,褲子的價格為120元/條.小明在該店買了3件T恤和2條褲子,請計算并顯示小明應該付多少錢?,算術運算符-自動類型轉換,下面代碼的輸出結果是什么? int a = 10, b = 3; int mod = a % b; double quo = a
15、 / b; Console.WriteLine(mod); Console.WriteLine(quo);,類型自動轉換規(guī)則,參與運算(算術運算和賦值運算)的操作數和結果類型必須一致. 當不一致時,滿足下面條件時,系統(tǒng)自動完成類型轉換 兩種類型兼容 例如:int 和 double 兼容 目標類型大于源類型 例如:double int 對于表達式 如果一個操作數為double型,則整個表達式可提升為double型 比如前面打8.8折的練習題. 求10/3求余數要想得到3.333的處理.,強制類型轉換,如上題中打完8.8折后出現小數,商店為了結算方便,只收用戶整數部分的錢,如本應收用戶303.6,
16、現在只收用戶303元,應該如何做? 語法: (數據類型名)待轉換的值; 如: int b = (int)3.14; 強制類型轉換,數據類型一定要相兼容 下面的寫法對嗎? int number = (int)”3.14”;,類型轉型,問題:讓用戶輸入他的語文和數學成績,計算他的總成績并顯示出來? Convert不再僅是內存級別的轉換,而是考慮數據意義的轉換。Convert是一個加工、改造的過程 通過 Convert.ToInt32(能轉換成int類型的數據)來把其他類型數據轉換成int類型 練習: 讓用戶輸入姓名 語文 數學 英語 三門課的成績,然后給用戶顯示:XX,你的總成績?yōu)閄X分,平均成績
17、為XX分。,練習,練習,編程實現計算幾天(如46天)是幾周零幾 天. 練習:編程實現107653秒是幾天幾小時幾分鐘幾秒? 修改上面的題目,讓用戶輸入.,算術運算符和復合賦值運算符,+ 自加一 有前加和后加 - 自減一 有前減和后減 一元運算符+/-比二元的+-優(yōu)先級高 += -= *= /= %=,練習:,1 請說出上面程序執(zhí)行完成后,var1中的值? 上題中如果改成: Var1=+var2 * var3-; Var1=?,關系運算符(比較運算),,=,老鼠的重量(1) 兔子的壽命(3)烏龜的壽命(1000) 3918 我的年齡(20)=你的年齡(20) 比大比小的結果是什么?,什么是boo
18、l類型(布爾),在計算機中,我們用什么數據類型來表示一句話的對錯?一個條件的成立與不成立? 布爾(bool)類型: bool值只有兩個 真:ture 假:false 關系運算的結果是布爾類型的 如在計算機中描述張三(20歲)比李四(18)小,這句話的結果. 練習看看上一頁ppt中四句話的結果,邏輯運算符,語句1;語句2;. 用一對大括號來組成語句塊,練習:,讓用戶輸入年齡,如果輸入的年齡大于18(含)歲,則給用戶顯示你已成年. 如果張三的 語文成績大于90并且音樂成績大于80 語文成績等于100并且音樂成績大于70,則獎勵100元. 讓用戶輸入用戶名和密碼,如果用戶名為admin,密碼為myp
19、ass,則提示登錄成功.,if-else,如果張三的考試成績大于90(含)分,那么爸爸獎勵他100元錢,否則的話,爸爸就讓張三寫學習總結. 使用if能否實現. 更好的實現,if-else 語法: if(條件) 語句1; else 語句2;,練習:,1、蓋茨買了一筐雞蛋,如果壞蛋少于5個,他就吃掉,否則他就去退貨 2、 要求用戶輸入兩個數a、b,如果a能被b整除或者a加b大于100,則輸出a的值,否則輸出b的值 3、對學員的結業(yè)考試成績評測(考慮用if好還是用if-else好) 成績=90 :A 90成績=80 :B 80成績=70 :C 70成績=60 :D 成績60 :E,if-else i
20、f,對學員的結業(yè)考試成績評測 成績=90 :A 90成績=80 :B 80成績=70 :C 70成績=60 :D 成績60 :E 用if-else實現? 更好的方法:if-else if,if-else if流程圖,課上練習,學編程不是看書,不是聽老師講,而是自己動手寫。 練習1:提示用戶輸入密碼,如果密碼是“888888”則提示正確,否則要求再輸入一次,如果密碼是“888888”則提示正確,否則提示錯誤,程序結束。 練習2:提示用戶輸入用戶名,然后再提示輸入密碼,如果用戶名是“admin”并且密碼是“888888”,則提示正確,否則,如果用戶名不是admin還提示用戶用戶名不存在,如果用戶名
21、是admin則提示密碼錯誤. 練習3:提示用戶輸入年齡,如果大于等于18,則告知用戶可以查看,如果小于10歲,則告知不允許查看,如果大于等于10歲并且小于18,則提示用戶是否繼續(xù)查看(yes、no),如果輸入的是yes則提示用戶請查看,否則提示退出,你放棄查看。,為什么使用switch,李四的年終工作評定,如果定為A級,則工資漲500元,如果定為B級,則工資漲200元,如果定為C級,工資不變,如果定為D級工資降200元,如果定為E級工資降500元. 設李四的原工資為5000,請用戶輸入李四的評級,然后顯示李四來年的工資.,switch-case,switch-case語法: switch(表達
22、式/變量) case 值1: 語句塊1; break; case 值2: 語句塊2; break; default:語句塊3; break; ,if-else if與switch的比較,相同點:都可以實現多分支結構 不同點: switch:一般 只能用于等值比較 if-else if:可以處理范圍,練習:,說出已學過的數據類型有哪些? 舉例說明已學過的運算符有哪些? 請用戶輸年份,輸入月份,輸出該月的天數. 對學員的結業(yè)考試成績評測(改成用Switch來做) 成績=90 :A 90成績=80 :B 80成績=70 :C 70成績=60 :D 成績60 :E,循環(huán)結構,實際生活中的循環(huán):打印10
23、0份試卷 10000米長跑 車輪 李四這次考試又粗心了,爸爸讓他寫1000遍下次考試一定要細心. 如何編程實現上面的問題? Console.WriteLine(下次考試一定要細心); Console.WriteLine(下次考試一定要細心); Console.WriteLine(下次考試一定要細心); .,使用循環(huán)解決,聰明的解決方法: int i=0; while(i1000) Console.WriteLine(下次考試一定要細心); i+; ,while,語法: while(循環(huán)條件) 循環(huán)體; ,特點:先判斷,再執(zhí)行,練習:,打印100次歡迎您來傳智播客學習 輸入班級人數,然后依次輸入
24、學員成績,計算班級學員的平均成績和總成績 老師問學生,這道題你會做了嗎?如果學生答會了(y),則可以放學.如果學生不會做(n),則老師再講一遍,再問學生是否會做了. 直到學生會為止,才可以放學. 直到學生會或老師給他講了10遍還不會,都要放學 2006年培養(yǎng)學員80000人,每年增長25%,請問按此增長速度,到哪一年培訓學員人數將達到20萬人?,do-while,明天小蘭就要登臺演出了,老師說再把明天的舞蹈表演一遍,如果滿意,小蘭就可以回家了.否則就需要再練習一遍,直到老師滿意為止. while or do-while ? do-while為先執(zhí)行,再判斷 do循環(huán)體; while(條件);,
25、練習:,練習1:計算1到100之間整數的和; 練習2:要求用戶輸入用戶名和密碼,只要不是admin、888888就一直提示用戶名或密碼錯誤,請重新輸入。 練習3:不斷要求用戶輸入學生姓名,輸入q結束. 練習4:不斷要求用戶輸入一個數字,然后打印這個數字的二倍,當用戶輸入q的時候程序退出。 練習5:不斷要求用戶輸入一個數字(假定用戶輸入的都是正整數),當用戶輸入end的時候顯示剛才輸入的數字中的最大值 練習6:張三先唱一遍要表演的歌曲,老師覺得張三唱歌不過關,就讓張三再唱一遍,老師滿意則張三可以下課,不然則需要再唱一遍,再問老師是否滿意.,while與do-while區(qū)別,通過練習,希望大家已經
26、掌握這兩種循環(huán). 語法不同 初始值不滿足循環(huán)條件時: while循環(huán)一次都不執(zhí)行 do-while循環(huán)會執(zhí)行一次,程序調試,設置斷點 單步運行 觀察變量,for,連續(xù)輸出100次我下次一定細心. 比較用for和while,哪種更好? 問題1:求1-100間的所有偶數和? 問題2:找出100-999間的水仙花數? 問題3:輸出九九乘法表(循環(huán)的嵌套) 語法: for(表達式1;表達式2;表達式3) 循環(huán)體;,練習:,Break,break用于循環(huán)中,退出當前循環(huán).,練習:,練習1:循環(huán)錄入5個人的年齡并計算平均年齡,如果錄入的數據出現負數或大于100的數,立即停止輸入并報錯. 練習2:在whil
27、e中用break實現要求用戶一直輸入用戶名和密碼,只要不是admin、888888就一直提示要求重新輸入,如果正確則提登錄成功. 1100之間的整數相加,得到累加值大于20的當前數,continue,立即結果本次循環(huán),判斷循環(huán)條件,如果成立,則進入下一次循環(huán),否則退出循環(huán). 舉例:運動員跑步喝水的例子,練習,練習1:用 while continue實現計算1到100(含)之間的除了能被7整除之外所有整數的和。,小節(jié),順序結構:語句順序執(zhí)行 分支結構:語句在滿足條件下執(zhí)行 if, if-else, if-else if, switch-case 表1?表2 :表3(三元) 循環(huán)結構:語句在滿足條
28、件下循環(huán)執(zhí)行多次 while, do-while, for 跳轉語句 break, continue,goto,枚舉常量結構,確定數量、確定值的幾個取值:東西南北、男女、上中下。,enum Gendermale,female enum QQStatusonline,offline,hidden,枚舉的用法,QQStatus status = QQStatus.online; 和用字符串比起來,用枚舉的好處就是限定了變量的取值范圍,程序處理起來更方便。,const 類型 常量名 = 常量值,static void Main(string args) const int PI = 3.14; PI
29、 = 3.20; ,字符串與枚舉的轉換,public enum Gender male, famale / Console.WriteLine(你的性別:0.,Gender.male.ToString();,(Gender)(Enum.Parse( typeof(Gender),male);,每一個值都對應一個數字 典型的枚舉類型:MessageBox.Show的參數(后面會學到),結構體,為什么要使用結構,例如c#中Color Point都是結構,訪問修飾符 struct 結構名 定義結構成員 ,public struct Person public string Name; public
30、int Age; public string Hobby; public int Popularity; public void SayHi() / . ,練習:,1 定義一個結構叫MyColor,有三個成員,分別為red,green,blue 聲明一個 MyColor類型的變量,并對其成員賦值.使MyColor可以表示成一個紅色. 2 定義一個結構類型Person,有三個成員,分別為姓名,性別,年齡 聲明兩個Person類型的變量,分別表示 張三 男 18歲/ 小蘭 女 16歲,數組,一次語文測試后,老師讓班長統(tǒng)計每一個學生的成績并計算全班(全班共60人)的平均成績,然后把所有成績顯示出來.
31、 如何聲明變量? 好的解決方法,使用數組.,數組,保存多個值。幾乎任意類型都可以聲明數組。,int nums = 5,3,8,int nums = new int3,int nums = new int35,3,8/個數和聲明數必須一致 int nums = new int55,3,8/錯誤 int nums = new int5,3,8/正確,可以省略數組個字 使用索引器訪問指定編號位置的元素,訪問數組元素:nums0、nums1。索引從0開始。取到的元素的類型就是數組元素的類型。還可以對數組元素進行賦值,數組的聲明 數組的賦值與取值 常見問題:求平均值,求最大值,求和,排序,練習:,練習1
32、:從一個整數數組中取出最大的整數 練習2:計算一個整數數組的所有元素的和。 練習3:將一個字符串數組輸出為|分割的形式,比如“梅西|卡卡|鄭大世” 練習4:將一個整數數組的每一個元素進行如下的處理:如果元素是正數則將這個位置的元素的值加1,如果元素是負數則將這個位置的元素的值減1,如果元素是0,則不變。 練習5:將一個字符串數組的元素的順序進行反轉。“3”,“a”,“8”,“haha” “haha”,“8”,“a”,“3”。第i個和第length-i-1個進行交換。 求平均值,求最大值,求和,try-catch的使用(簡單用法),try 有可能出現錯誤的代碼; catch 如果try中的代碼出
33、現異常,則進去catch中 ,方法(函數)介紹,函數就是將一堆代碼進行重用的一種機制。函數就是一段代碼,這段代碼可能有輸入的值(參數),可能會返回值。一個函數就像一個專門做這件事的人,我們調用它來做一些事情,它可能需要我們提供一些數據給它,它執(zhí)行完成后可能會有一些執(zhí)行結果給我們。要求的數據就叫參數,返回的執(zhí)行結果就是返回值。 string s=Console.ReadLine()就是一個有返回結果的函數;Console.WriteLine(hello)就是一個有執(zhí)行參數的函數,只有告訴WriteLine被打印的數據它才知道如何打??;int i=Convert.ToInt32(22)則是一個既有
34、參數又有返回值的函數。 有了函數寫代碼就像拼積木,C#中的各種各樣的技術其實就是通過for、if等這些基礎的語法將不同的函數按照一定的邏輯組織起來。,方法,方法的定義: 訪問修飾符 static 返回值類型 方法名() 方法體; 命名規(guī)則:方法名開頭大寫,參數名開頭小寫,參數名、變量名要有意義 方法的調用,對于靜態(tài)方法,如果在同一個類中,直接寫名字調用就行了. return可以立即退出方法.,常用的已經學過的方法:,Console.WriteLine(); Console.Write(); Console.ReadLine(); Console.ReadKey(); int.Parse(str
35、ing); Convert.ToInt32(string); 對于由static修飾的方法,使用:類名.方法名()調用. 如果在類中調用自己的由static修飾的方法,可以省略類名.,變量的作用域(只講局部變量),閱讀下面的程序,說一下輸出結果是多少?,變量的作用域,在方法中定義的變量稱為局部變量,其作用域從定義開始,到其所在的大括號結束為止. 在一個方法中想要訪問另一個方法中的變量,怎么辦? 兩種解決方法:參數和返回值 舉例:寫一個方法,判斷一個年份是否是潤年. 方法中的return語句 導致函數立即返回。在返回值為void的函數中return,在返回值非void的函數中return 值,練
36、習,自己寫一個方法,1 讀取輸入的整數,定義成方法,多次調用(如果用戶輸入的是數字,則返回,否則提示用戶重新輸入) 2 還記得學循環(huán)時做的那道題嗎?只允許用戶輸入y或n,請改成方法 3查找兩個整數中的最大值:int Max(int i1,int i2) 4計算輸入數組的和:int Sum(int values),思考:,即然Console.WiteLine()是方法,那么為什么WiteLine的參數可以是字符串類型,也可以是數字類型,還可以是布爾類型char類型呢? 為什么要有方法的重載?,函數重載(函數重名),函數的重名: static void SayHello(string name)
37、Console.WriteLine(我是0,name); static void SayHello(string name) Console.WriteLine(I am0,name); ,static void SayHello(string name) Console.WriteLine(我是0,name); static void SayHello(int age) Console.WriteLine(我的年齡0,age); ,static void SayHello(string name) Console.WriteLine(我是0,name); static int SayHell
38、o(string name) return 10; ,static void SayHello(string name) Console.WriteLine(我是0,name); static void SayHello(string name,string nickname) Console.WriteLine(我是0,昵稱是1,name,nickname); ,構成重載的條件:參數類型不同或者參數個數不同(不嚴謹的),與返回值無關。,思考:,方法只能返回一個值,當需要返回多個值時怎么辦? 例如: 寫一個方法,計算一個int類型數組中每個元素的總和 和 最大值與最小值?,方法的out參數和r
39、ef參數(*),函數參數默認是值傳遞的,也就是“復制一份”,例子: int age=20; IncAge(age); Console.WriteLine(age=0,age); out則是內部為外部變量賦值,out一般用在函數需要有多個返回值的場所。 例:int.TryParse。,方法的練習:,重復讓用戶輸入一個數,判斷該數是否是質數,輸入q結束? 質數的判斷用方法來實現 將一個字符串數組輸出為|分割的形式,比如“梅西|卡卡|鄭大世”(用方法來實現此功能) 用方法實現找出一個int類型數組中最大值和最小值 寫一個方法,實現MyTryParse的功能,面向對象概念,世界是由什么組成的: 化學家
40、 畫家 程序員 萬物皆對象 試著描述楊老師和學生張三的特征和行為,屬性對象具有的各種特征 每個對象的每個屬性都擁有特定值 例如:楊老師和張三的年齡不一樣. 屬性:姓名,性別,年齡 屬性的值: 方法: 行為,動作.執(zhí)行的操作. 方法:楊老師的行為,上課. 學生的行為,學習,練習:,說說教室里有哪些對象?這些對象有哪些屬性和方法? 比如:電腦/燈/音箱等等 一切皆對象,找出下列對象共性,張三(一個學生)楊老師鄰居售貨員張阿姨李四的爸爸李四的媽媽 門口停的奔馳S320汽車/老師開的QQ汽車/楊老師的解放牌大貨車 類:類是模子,確定對象將會擁有的特征(屬性)和行為(方法) 類是對象的類型 人類 解俊峰
41、; int a;,類和對象的區(qū)別,類是抽象的概念,僅僅是模板,比如說:“人”類 對象是一個你能夠看得到、摸得著的具體實體 人類都有:姓名性別年齡 屬性,有說話的方法. 張三是一個對象,他的姓名屬性的值:張三 性別的屬性的值:男 年齡屬性的值:20 張三會說話 對象可以叫做類的實例(Instance) 類不占內存,對象才占內存.,類的定義,定的定義語法: 訪問修飾符 class 類名 成員; . 類中可以包含變量的定義、方法。 請練習定義一個人類.人類分別用三個變量來表示姓名性別年齡,有一個打招呼的方法,有一個走路的方法.,類的實例化,類的實例化,用關鍵字new 語法: 類 實例名 = new
42、類(); 類的成員的訪問: 實例名.屬性 實例名.方法名(); 字段、方法、屬性(后面講)都可以叫做類的成員Member,它們都需要定義訪問級別。訪問級別的用處在于控制成員在哪些地方可以被訪問,這樣達到面向對象中“封裝”的目的。 訪問修飾符:public private (internal protected),屬性,字段用public修飾的問題. 屬性的定義.get;set; 屬性是為了保護與之相對應的字段的.保證對字段的讀取和賦值符合要求. 屬性可分為:讀寫、只讀、只寫。 允許外部訪問的變量一定要聲明為屬性。,類的練習:,定義一個學生類,有六個屬性,分別為姓名、性別、年齡、語文、數學、英語
43、成績。 有2個方法: 一個打招呼的方法:介紹自己叫XX,今年幾歲了。是男同學還是女同學。 兩個計算自己總分數和平均分的方法。顯示:我叫XX,這次考試總成績?yōu)閄分,平均成績?yōu)閄分 實化兩個對象并測試: 張三 男 18 三科成績?yōu)?90 95 80 小蘭 女 16 三科成績?yōu)?95 85 100,類的構造方法,構造方法用來創(chuàng)建對象,并且可以在構造函數中對對象進行初始化。 構造函數是用來創(chuàng)建對象的特殊方法,方法名和類名一樣,沒有返回值,連void都不用。 構造函數可以有參數,new對象的時候傳遞函數參數即可 如果不指定構造函數,則類有一個默認的無參構造函數。如果指定了構造函數,則不再有默認的無參構造
44、函數,如果需要無參構造函數,則需要自己來寫。 構造函數可以重載,也就是有多個參數不同的構造函數。 認識類圖,c#中的類圖和通用類圖,析夠函數(*) ,不能在結構中定義析構函數。只能對類使用析構函數。 一個類只能有一個析構函數。 無法繼承或重載析構函數。 無法調用析構函數。它們是被自動調用的。 析構函數既沒有修飾符,也沒有參數。,練習1,給前面寫的學生類添加構造方法.使在實例化學生類的時候可以通過構造方法對姓名性別年齡語數英等屬性賦值,也可以只對姓名和性別賦值.年齡默認為18歲,語數英成績默認為0分.,練習2:,寫一個Ticket類,有一個距離屬性(本屬性只讀,在構造方法中賦值),不能為負數,有
45、一個價格屬性,價格屬性只讀,并且根據距離計算價格(1元/公里): 0-100公里 票價不打折 101-200公里 總額打9.5折 201-300公里 總額打9折 300公里以上 總額打8折 有一個方法,可以顯示這張票的信息. 測試上面的類.,臨時加(根據學生問題添加),參數中使用out 和 ref的區(qū)別 數組做為參數 param,命名空間,namespace(命名空間),用于解決類重名問題,可以看做“類的文件夾”。 如果代碼和被使用的類在一個namespace則不需要using。 在不同命名空間下的類調用有兩種方法: 寫全稱 命名空間.類名 先using引用命名空間,再調用,字符串的處理,st
46、ring可以看做是char的只讀數組。char c = s1;。例子:遍歷輸出string中的每個元素。 C#中字符串有一個重要的特性:不可變性,字符串一旦聲明就不再可以改變。所以只能通過索引來讀取指定位置的char,不能對指定位置的char進行修改。 如果要對char進行修改,那么就必須創(chuàng)建一個新的字符串,用s. ToCharArray()方法得到字符串的char數組,對數組進行修改后,調用new string(char)這個構造函數(暫時不用細研究)來創(chuàng)建char數組的字符串。一旦字符串被創(chuàng)建,那么char數組的修改也不會造成字符串的變化。例子:將字符串中的A替換為a。,字符串,練習一:隨
47、機輸入你心中想到的一個名字,然后輸出它的字符串長度 Length:可以得字符串的長度 練習二:兩個學員輸入各自最喜歡的課程名稱,判斷是否一致,如果相等,則輸出你們倆喜歡相同的課程.如果不相同,則輸出你們倆喜歡不相同的課程. 上題中兩位同學輸入 c#和 C#代表同一門課,怎么辦? 字符串的連接+,兩邊只要有一個是字符串類型,另一個也會被自動轉換成字符串類型 一切類型都可以調用.ToString()方法轉換成字符串類型.,常見疑問,誰說字符串不可變?string s = abc;s=123,s這不是變了嗎 要區(qū)分變量名和變量指向的值的區(qū)別。程序中可以有很多字符串,然后由字符串變量指向他們,變量可以
48、指向其他的字符串,但是字符串本身沒有變化。字符串不可變性指的是內存中的字符串不可變,而不是變量不變。 string s10 = s1;/s10指向s1指向的字符串,而不是s10指向s1,哪怕s1以后指向了其他內存,那么s10還是指向hello,abc,admin,888888,s1,s1,String類常用方法,ToLower():得到字符串的小寫形式。 注意字符串是不可變的,所以這些函數都不會直接改變字符串的內容,而是把修改后的字符串的值通過函數返回值的形式返回。s.ToLower()與s=s.ToLower() ToUpper():得到字符串的大寫形式; Trim()去掉字符串兩端的空白。
49、 s1.Equals(s2, StringComparison.OrdinalIgnoreCase),兩個字符串進行比較不區(qū)分大小寫的比較。 s1=s2,字符串的分割,string Split(params char separator):將字符串按照指定的分割符分割為字符串數組; string Split(char separator, StringSplitOptions options)將字符串按照指定的char分割符分割為字符串數組( options 取RemoveEmptyEntries的時候移除結果中的空白字符串); 練習:從日期字符串(2008-08-08)中分析出年、月、日;2
50、008年08月08日。 讓用戶輸入一個日期格式如:2008-01-02,你輸出你輸入的日期為2008年1月2日,字符串函數詳解,字符串替換:string Replace(string oldValue, string newValue)將字符串中的出現oldValue的地方替換為newValue。例子:名字替換。 取子字符串:string Substring(int startIndex),取從位置startIndex開始一直到最后的子字符串; string Substring(int startIndex, int length),取從位置startIndex開始長度為length的子字符串
51、,如果子字符串的長度不足length則報錯。 bool Contains(string value)判斷字符串中是否含有子串value bool StartsWith(string value)判斷字符串是否以子串value開始; bool EndsWith (string value)判斷字符串是否以子串value結束; int IndexOf(string value):取子串value第一次出現的位置。 Int IndexOf(string value,int startIndex),字符串常用方法:,學習查看msdn,字符串的處理練習,課上練習1:接收用戶輸入的字符串,將其中的字符以與
52、輸入相反的順序輸出。abccba 課上練習2:接收用戶輸入的一句英文,將其中的單詞以反序輸出。hello c sharpsharp c hello 課上練習3:從Email中提取出用戶名和域名:。 課上練習4:文本文件中存儲了多個文章標題、作者,標題和作者之間用若干空格(數量不定)隔開,每行一個,標題有的長有的短,輸出到控制臺的時候最多標題長度10,如果超過10,則截取長度8的子串并且最后添加“.”,加一個豎線后輸出作者的名字。 讓用戶輸入一句話,找出所有e的位置,對象的引用(非常重要),舉例:結構版的Person的賦值 與 類版的Person的賦值 int、decimal、bool、doub
53、le byte 枚舉結構等類型(值類型)是傳遞拷貝;對象(引用類型)則是傳遞引用。 方法間傳遞對象。,.net中哪些是值類型?哪些是引用類型?,為什么要繼承,分別寫一個Teacher類和一個Student的類 ,分析他們應該有哪些屬性和方法. 假如系統(tǒng)還要再加入班主任類、校長類、家長類.試分析這幾個類的屬性? 代碼冗余,怎么解決?,冗余的解決方案,繼承的符號:,利用繼承實現Student類和Teacher類繼承自Person類. Student類和Teacher類繼承父類的屬性和方法. Student類和Teacher類還有自己獨有的屬性和方法.,繼承的使用,class Student:Per
54、son.; class Teacher:Person.; 子類繼承了父類的成員,子類還可以有自己的成員. Person叫做父類(基類) Student和Teacher叫子類(派生類) Student繼承了Person類 Person類派生了Teacher類 在c#中,所有的類都直接或間接的繼承自了object類.(當我們定義一個類的時候,如果沒有寫:繼承一個類,那么這個類就繼承了object類),練習:,寫一個Student類和一個Teacher類,他們都有一個打招呼的方法,不同的是Studetn打招呼是說大家好,我叫XX,我今年XX歲了,我的愛好是XXX,Teacher的打招呼的方法是說大家
55、好,我叫XX,我今年XX歲了,我已經工作XX年了?,顯示調用父類的構造方法,實例化子類時是否調用了父類的構造方法?順序如何? 利用構造方法設置公共屬性,也就是說若父類的構造方法有參數,應該如何處理呢? 顯示調用父類的構造方法,關鍵字: base,protected,protected訪問修飾符不允許其他非子類訪問 修改剛剛的練習,父類中把訪問修飾符改成protected子類中還能被調用到嗎?其他非子類能調用嗎? 繼承的傳遞性. 繼承的單根性.,類型轉換(lsp),Person p = new Teacher(); 子類可以隱式的轉換成父類. Teacher t=(Teacher)p; is和a
56、s typeA is type B 僅判斷 typeA as TypeB 先判斷,再轉換,練習:,自己定義一個父類Person,兩個子類Teacher和Student類.Person寫一個有參數的構造方法. 自己試試,子類可以自動轉父類,父類轉子類要通過強轉.為了不出錯,可以先通過is判斷或用as轉換.,ArrayList和HashTable,為什么要用ArrayList和HashTable ArrayList元素的增加、插入、刪除、清空、排序、反轉。 HashTable的增、刪、查、判存。 foreach,異常與異常處理,傳統(tǒng)的錯誤表示方式:錯誤碼。舉例。需要知道不同錯誤碼的含義,如果不處理
57、錯誤碼,則程序可能陷入不可以預置的錯誤。陳攝影師以為文件已經被刪除造成的麻煩。 錯誤碼的缺點:不處理則很難發(fā)現,每次處理則很麻煩;難以看出錯誤的原因;容易使得程序進入不確定狀態(tài)。 try catch。Exception ex 異常也是對象。 Exception 類主要屬性:Message、StackTrace 發(fā)生異常后程序默認就退出了,try代碼塊中的后續(xù)代碼不會被執(zhí)行。catch以后的代碼則會繼續(xù)執(zhí)行。 不要吃掉異常,一般情況下不需要處理異常。 扔出自己的異常,扔:throw,抓?。篶atch,索引器,C#中提供了按照索引器進行訪問的方法 定義索引器的方式:string thisint i
58、ndexget return ; set ,string為索引器的類型,中是參數列表。進行索引器寫操作就是調用set代碼塊,在set內部使用value得到用戶設置的值;進行讀操作就執(zhí)行get代碼塊。 索引器參數可以不止一個,類型也不限于int,幾乎可以是任意類型。 練習1:定義一個集合類(學生類),不僅可以通過下標查找學生,還可以通過姓名查找(設姓名沒有重復) 練習2:上面的火星文的例子,不要用Dictionary,用自己寫的一個Dictionary測試,通過Stopwatch查看效率。,靜態(tài)方法和實例方法(定義和調用),北京傳智播客教育 ,WinForm編程基礎,講師:蘇 坤,Winform
59、基礎,創(chuàng)建Winform應用程序,觀察窗體生成和文件和代碼 工具箱:添加控件 復制 對齊 屬性(以窗體或Button為例):如何更改屬性 常用屬性 (name) Visibale Enabled Location Size Text等 事件:當事件發(fā)生的時候,.net框架會幫助我們執(zhí)行一個方法.叫事件處理方法.具體為什么會執(zhí)行這個方法,.net高級中會講. 屬性也可以通過代碼來賦值. MessageBox類,控件介紹,Label:用于向用戶展示信息 LinkLabel:鏈接 TextBox:一般用于接收用戶的輸入 PictureBox:顯示圖片,簡單的WinForm程序,練習1:矩形輸入寬和高,輸出面積。 練習2:簡單的加法計算器,用戶在文本框1、2中輸入兩個數,點擊按鈕,在文本框3中顯示兩個數的和。如果1或者2為錯誤的數據格式,則彈出對話框提示錯誤. 練習3:用戶在文本框1、2中輸入兩個數,點擊按鈕,在文本框3中顯示從文本框1中的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 母親節(jié)小班活動方案
- 母嬰館六一活動方案
- 法治衛(wèi)士實踐活動方案
- 樣品贈送活動方案
- 母親節(jié)護膚品活動方案
- 檢察院普法宣講活動方案
- 水餃diy活動方案
- 母嬰新店開業(yè)活動方案
- 汽車結構游戲活動方案
- 棉簽用途活動方案
- 裝修改造工程施工總平面圖6
- 教師的職業(yè)生涯規(guī)劃與專業(yè)發(fā)展課件
- (完整版)標書密封條格式word
- 《關于漢語規(guī)范化的意義探析》
- 公司一年完稅證明模板
- [湖南]5萬噸凈水廠給排水工藝全套圖紙(附170頁計算說明)
- DB33T 1203-2020 建設工程施工揚塵控制技術標準
- 外國文學名著導讀
- 腦卒中患者血壓管理
- 如何制作OruxMaps離線地圖
- 校企汽修專業(yè)戰(zhàn)略合作協(xié)議書
評論
0/150
提交評論