C#學(xué)習(xí)筆記(c#重點整理).doc_第1頁
C#學(xué)習(xí)筆記(c#重點整理).doc_第2頁
C#學(xué)習(xí)筆記(c#重點整理).doc_第3頁
C#學(xué)習(xí)筆記(c#重點整理).doc_第4頁
C#學(xué)習(xí)筆記(c#重點整理).doc_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C#學(xué)習(xí)筆記1. C#具有所有面向?qū)ο蟮恼Z言的所有特性:封裝,繼承,多態(tài)。在C#系統(tǒng)中,所有的類型都可以看作一個對象。C#只允許單繼承,即一個類不會有多個基類,C#不會有全局函數(shù),不會有全局變量,不會有全局常數(shù),所有的一切只能封裝在一個類中。2. .net包括四個部分:vos類型系統(tǒng);元數(shù)據(jù);公用語言規(guī)范;虛擬執(zhí)行系統(tǒng)。3. using system表示導(dǎo)入名稱空間。4. 讓我們從第一個程序開始就記得:每個東西都必須屬于一個類,類里面的方法總是為我們完成某件工作的。在C#中,程序的執(zhí)行總是從main()方法開始的,一個程序中不允許出現(xiàn)兩個或兩個以上的main()方法。對于習(xí)慣學(xué)C控制臺程序的讀者,必須要牢記:main()方法必須包含在一個類中。5. 利用string可以方便地對字符串進(jìn)行連接或剪切。例:string s=”good”+”morning”;char x=s3字符串可以通過下標(biāo)進(jìn)行索引,得到一個字符。6. 我們可以用/進(jìn)行單行標(biāo)注,/* */進(jìn)行多行標(biāo)注。7. 在C和C+中,任何非0值都表示真,在C#中,任何非0值都不能代替true.在其它類型的整型值和布爾值之間不存在任何的轉(zhuǎn)換,將整型轉(zhuǎn)換成布爾型是不合法的。8. 把一系列相關(guān)的變量組織成單一實體的過程稱為生成結(jié)構(gòu)的過程。這個單一實體的類型叫結(jié)構(gòu)類型,每一個變量就是結(jié)構(gòu)的成員。9. 結(jié)構(gòu)類型包含的成員類型可以相同,也可以不同。我們甚至可以把一個結(jié)構(gòu)類型當(dāng)作另一個結(jié)構(gòu)成員的類型。10. 枚舉實際上是為一組在邏輯上密不可分的整數(shù)值提供便于記憶的符號。結(jié)構(gòu)類型變量的值由各個成員的值組合而成。而枚舉則不同,枚舉類型的變量在某一時刻只能取枚舉中某個元素的值。按照系統(tǒng)的設(shè)定,每個元素的類型都為整型。且第一個元素的值為0,后面的每個元素梯加1,也可以直接賦值。如把前面第一個元素的值設(shè)為1,后面的元素不用設(shè),系統(tǒng)自動將后面元素的值遞加1.11. C#中另一大數(shù)據(jù)類型是引有類型。其含義是該類型的變量不直接存儲所包含的值,而是指向它所要存儲的值。也就是說引用類型存儲實際數(shù)據(jù)引用值的地址。12. 類是面向?qū)ο缶幊痰幕締挝?,是一種包含數(shù)據(jù)成員,函數(shù)成員和嵌套類型的數(shù)據(jù)結(jié)構(gòu)。類和結(jié)構(gòu)都包含了自己的成員,但它們的區(qū)別是:類是引用類型 ,而結(jié)構(gòu)是值類型。13. 如果我們對某個類定義了一個變量 ,則我們就將它稱為類的一個實例。14. 我們常用到的類:object類。這個類是其它所有類的基類,其它類型可以直接或間接地從object類中繼承。因此,對一個object類的變量可以賦于任何類型的值。15. 代表?在聲明代表時,只需要指定代表指向的原型的類型,它不能有返回值,也不能帶有輸出類型的參數(shù)。如:delegate int Mydelegate().在使用的時候:Mydelegate d=new Mydelegate(p.instanceMethod).為什么不用delegate d= new Mydelegate(p.instanceMethod)呢?原因是delegate相當(dāng)于class需要一個名字,class myclass這個class的名字是myclass而且它包含有其它元素、常數(shù)或者函數(shù),變量等。跟char a=a不同,它不包含有其它的元素,a就是一個變量。而myclass不是變量,它只一個名字。而myclass a=new myclass(); a才是變量,是類的一個實例。在這里,這個delegate的名字是Mydelegate,也并不是一個變量。16. 變量從用戶角度來說,是存儲信息的基本單元,從系統(tǒng)角度來說,變量就是計算機內(nèi)存中的一個儲存空間。17. 靜態(tài)方法不能用類的實例來訪問,必須用類名來訪問。18. 數(shù)組的聲明:數(shù)組的類型 數(shù)組的元素個數(shù) 數(shù)組的名字;數(shù)組個數(shù)可以通過數(shù)組名加圓點加Length獲得。如arr.Length表示arr數(shù)組的個數(shù)19. 在進(jìn)行批量處理數(shù)據(jù)的時候,我們要用到數(shù)組.數(shù)組是一組類型相同的有序數(shù)據(jù).20. 數(shù)組的初始化:int a1=new int1,2,3;為什么是new int,而不是new a1呢:因為int是類型,a1是int類型的一個實例.而且a1所代表的是1,2,3,并不是函數(shù).與delegate int Myclass();不同,Myclass()雖然是一個名字,但它可以代表一個函數(shù),不是常數(shù).原則:類型后面的名字如果可以代表函數(shù),則這個名字就是一種類型.如果類型后面的名字代表常數(shù),則這個名字不是一種類型,只是類型的一個變量.或者可以用另一種說法:如果名字后面含有(),則在賦值或設(shè)定實例的時候new后面要用該名字作為類型.21. 變量名不能與C#中的關(guān)鍵字名稱相同;變量名不能與C#中庫函數(shù)名稱相同。22. 靜態(tài)變量:static int a;一旦靜態(tài)變量所屬的類被加載,直到包含該類的程序運行結(jié)束前它將一直存在。23. 穩(wěn)性數(shù)據(jù)轉(zhuǎn)換實際上就是從低精度的數(shù)據(jù)轉(zhuǎn)換成高精度的的數(shù)據(jù)類型。如:ushort轉(zhuǎn)換成int.24. 隱式枚舉轉(zhuǎn)換允許把十進(jìn)制數(shù)0轉(zhuǎn)換成任何枚舉類型,對其它整數(shù)則不存在這種隱式轉(zhuǎn)換。25. 從元素類型為TS的數(shù)組類型S到元素類型為Tt的數(shù)組類型T轉(zhuǎn)換,如果元素類型為值類型,則不能進(jìn)行隱式轉(zhuǎn)換。26. 有一個元素類型為int的枚舉類型E,則當(dāng)執(zhí)行從E到byte的顯示枚舉類型轉(zhuǎn)換時,實際上作的是從int 到byte的顯示數(shù)字轉(zhuǎn)換;當(dāng)執(zhí)行從byte到E的顯式枚舉轉(zhuǎn)換時,實際上是執(zhí)行byte到int的隱式數(shù)字轉(zhuǎn)換。如:Weekday day;day=(Weekday) 3;實際上是E到byte的顯示枚舉類型轉(zhuǎn)換。27. 如何使用枚舉:enum Color red=0, yellow, blue,green,purple ;Color color_arr = new Color();Color_arr=(Color) 2;Console.WriteLine(“Color_arr0”,Color_arr);.則其輸出結(jié)果為blue.28. 賦值操作符()和條件操作符(?:)按照右結(jié)合的原則,即操作從右到左的順序執(zhí)行。Y=(x10? 0:1).29. 枚舉類型的加法:Weekday day1=Weekday.Sunday; Weekday day2=Weekday.Saturday;Weekday day3=day1+6;枚舉型加法實際上枚舉基類型元素相加即一般為(int 型相加)。30. 如果兩個整數(shù)類型的變量相除又不能整除,返回結(jié)果是不大于相除之值的最大整數(shù)。31. 求余運算:5%32;5%2. as操作符用于通過引用轉(zhuǎn)換或裝箱轉(zhuǎn)換將一個值顯式地轉(zhuǎn)換成指定的引用類型。33. 位運算符就是對數(shù)按二進(jìn)制位進(jìn)行運算的操作符。位運算中的異或運算,當(dāng)兩個位相同時,異或運算結(jié)果為0,不相同時異或運算為1.移位運算,左稱位將操作數(shù)向左位移,高位被拋棄,低位順序補0.右移運算時,如果X為非負(fù)數(shù),最高位設(shè)為0;如果X為負(fù)數(shù),最高位設(shè)為1,即最大為1.34. 自增自減操作符:自增自減操作符有前綴和后綴之分。對于前綴操作符,遵行的原則是“先增減,后使用”,后綴則相反,“先使用,后增減”。35. new操作符:new操作符用于創(chuàng)建一個新的類型實例。它有三種形式:1,對象創(chuàng)建表達(dá)式。2,數(shù)組創(chuàng)建表達(dá)式。3代表創(chuàng)建表達(dá)式。36. typeof操作符用于獲得系統(tǒng)原型對象的類型。37. check 和 uncheck操作符只影響其置于括號中的運算的溢出檢查。二 流程控制1.C#提供的選擇語句有if和switch語句。2.如果if或else語句包含的嵌套語句只包含一條執(zhí)行語句,則嵌套部分的大括號可以省略。3.每一條else與離它最近且沒有其它 else與之配對的if相搭配。4.if語句僅允許布爾數(shù)據(jù)類型的結(jié)果。例:if(args.length=0)是正確的。而if(args.length)是不正確的。args.length返回一個整形數(shù)(integer)。5.switch語句是只能有一個default標(biāo)簽。6.C#中它要求每個case標(biāo)簽項后使用break語句或中轉(zhuǎn)語句goto,即不允許從一個case自動遍歷到其它case.如果想遍歷其它語句,則可以加入下面兩條跳轉(zhuǎn)語句:goto case lable:跳至標(biāo)簽語句執(zhí)行。Goto default:跳至default標(biāo)簽執(zhí)行。7.數(shù)組的初始化:int a1=new int1,2,3,4,58.在事先知道循環(huán)次數(shù)的條件下,用for循環(huán)是比較方便的。9.while語句中允許使用break語句來結(jié)束循環(huán)。也可以使用continue語句來停止內(nèi)嵌語句的執(zhí)行,繼續(xù)進(jìn)行while循環(huán)。10.可以使用break和continue語句來控制循環(huán)的表達(dá)。如:要求打印除7以外的0到9的語句,只需要在到打印7的時候,跳出打印語句就可以了。For(int i=0;i9;i+) if i=7 continue;console.write(i);11.foreach(Myint x in Prime)12.預(yù)編譯和條件編譯都是以#開頭的。可以幫助我們在程序執(zhí)行過程中發(fā)出編譯的錯誤或警告。13.溢出的處理用checked來檢測。14.預(yù)處理指令如果出現(xiàn)在其它輸入輸出元素中間就不會被執(zhí)行。中writeLine或Readline等中間。三 類1.C#中的類只支持單繼承。2.對類成員的訪問:1.公有成員。Public,允許外部訪問。2.私有成員。Private,只允許類中的成員訪問。派生類都不能訪問。3.保護(hù)成員。Protected.方便派生類的直接訪問,同時又希望對外部是隱藏的。4.內(nèi)部成員。Internal.對于同一包內(nèi)的程序或庫是透明的。而對于包外是隱藏的。5.類中的成員要么是靜態(tài)要么是非靜態(tài)。一般來說,靜態(tài)成員是屬于類所有,非靜態(tài)成員則屬于類的實例對象。訪問的時候:靜態(tài):類名.成員名;非靜態(tài):實例名.成員名(this.成員名)static6. 關(guān)鍵字const用于聲明常量,后跟數(shù)據(jù)類型的聲明。例:public const double x=1.0;7.構(gòu)造函數(shù)不聲明返回類型,構(gòu)造函數(shù)用于執(zhí)行類的實例的初始化。8.折構(gòu)函數(shù)在類的實例超出實用范圍時,我們希望收回它所占的存儲時使用。析構(gòu)函數(shù)跟類名相同,只是在前面加上一個符號:9.值參數(shù):使用值參數(shù)時,初調(diào)用的方法不會修改內(nèi)存中實參的值。引用型參數(shù):引用型參數(shù)并不開辟新的內(nèi)存區(qū)域。當(dāng)利用引用型參數(shù)向方法傳遞形參時,編譯程序?qū)褜嶋H參數(shù)所在內(nèi)存中的地址傳遞給方法。10.substring(0,i) 從此實例檢索子字符串。子字符串從指定的字符位置開始且具有指定的長度。String.indexof(char) 報告指定 Unicode 字符在此字符串中的第一個匹配項的索引.11.輸出型參數(shù): 輸出型參數(shù)也不開辟新內(nèi)存,跟引用型參數(shù)一樣,只是引用型參數(shù)在使用的時候不用需要對變量進(jìn)行初始化,引用型參數(shù)用于傳遞方法的返回數(shù)據(jù)。12.如果形參中包含了數(shù)組參數(shù),那么它必須在參數(shù)表中位于最后。另外,參數(shù)只允許一維數(shù)組。13.靜態(tài)方法可以訪問類中的靜態(tài)成員,但不能訪問非靜態(tài)成員。但可以將類的實例當(dāng)作參數(shù)傳遞給方法使用,指明具體的調(diào)用對象,這時就可以操作實例的靜態(tài)和非靜態(tài)成員了。14.類的方法的重載:方法的名字相同,但參數(shù)個數(shù)或類型不同,編譯器 就能知道在什么時候調(diào)用什么方法。15.C# 中,操作符重載總是在類中聲明,并且通過調(diào)用類的成員方法來實現(xiàn)。操作符重載可以適用于類的實例的操作。16.靜態(tài)域的聲明用static修飾符。無論建立多少個該類的實例,內(nèi)存中只存在一個靜態(tài)數(shù)據(jù)拷貝。域相當(dāng)于簡單成員變量。在另一個類對靜態(tài)域的訪問可以通過對靜態(tài)域所在類的public方法進(jìn)行訪問。17.簡單地說:const型表達(dá)式的值在編譯時形成,而只讀域static readonly表達(dá)式的值在程序運行時才形成。這種方法有利于版本的控制。18.對于靜態(tài)域,類在裝載時對其進(jìn)行初始化;對于非靜態(tài)域,在類的實例創(chuàng)建時進(jìn)行初始化。19.雖然域和屬性語法類似,但不能把屬性當(dāng)作變量那樣使用。也不能把屬性當(dāng)作引用型參數(shù)或輸出型參數(shù)進(jìn)行傳遞。在屬性的訪問聲明 中,對屬性的值的訪問用get關(guān)鍵字標(biāo)出。對屬性的值的寫操作用set標(biāo)出。20.不直接操作類的數(shù)據(jù)內(nèi)容,而是通過訪問器進(jìn)行訪問,它借助get和set對屬性值進(jìn)行讀寫。事件和索引指示器1. 事件所聲明的類型必須是一個代表類型(delegate),代表類型應(yīng)預(yù)先聲明。2. 在編寫類的時候,我們可以編寫事件向客戶說明發(fā)生了什么事情。事件可以在類的屬性或域中加以說明,但事件的類型必須是代表型的。我們可以預(yù)訂事件確保事件初觸發(fā)或撤消觸發(fā)。3. 索引指示器為我們象使用數(shù)組那樣為類或類的實例添加路徑列表,通過下標(biāo)進(jìn)行訪問類中的信息。4. 事件的聲明格式:例:public event eventhandler click;這個省略了事件訪問聲明。5. public event eventhandler click。這個沒有省略事件訪問聲明。大多數(shù)情況下不用事件訪問聲明。6. 索引指示器:IPaddress m_arrayips;public void IPaddress thisint nindex getreturn m_arrayipsint nindex; this代表實例,我們象使用數(shù)組那樣為類或類的實例添加路徑列表. 實例i實際上代表的是類中的屬性或域的信息列表。實例i.繼承1. C#中,一個派生類只能從一個類中繼承。Object類為所有類的基類。2. 虛方法:當(dāng)類中的方法聲明前加了virtual,我們稱為虛方法,它在執(zhí)行時可以被派生類改變。派生類中Override+虛方法。虛方法在基類中定義,則基類運行虛方法時會實際運行派生類中的方法。還必須指明,基類 實例派生類 實例。3. 抽象類:abstract.抽象類只能作為其它類的基類,不能直接實例化。如果一個非抽象類從抽象類中派生,則其必須通過重載來實現(xiàn)所有繼承而來的抽象成員。抽象類是特殊的虛類。4. 在派生類中重新定義虛方法,要求方法名稱,參數(shù)個數(shù)和類型必須與基類虛方法完全一致。5. 只能在抽象類中聲明抽象方法。抽象類可以作為非抽象類的基類,也可以作為派生類。我們可以利用抽象方法來重載基類虛方法,這時基類中的虛方法就被攔截了。6. 密封類不能繼承,密封類不能同時又是抽象類,抽象類總是希望被繼承。密封類不可能有派生類,如果密封類中有虛成員函數(shù),則該成員可以轉(zhuǎn)化成非虛的,virtual無效。7. 密封方法可以防止方法的重載。不是所有成員方法都可以作為密封方法,密封方法必須對基類的虛方法進(jìn)行重載,提供具體的實現(xiàn)方法。所以,在方法的聲明中,sealed修飾符總是和override修符同時使用。8. 抽象屬性,抽象方法只允許在抽象類中聲明。抽象類的這些成員交給派生類去實現(xiàn)。必須在非抽象類中重載抽象屬性,非抽象類不允許存在抽象成員。屬性聲明時如果有sealed,則必須同時有override.修飾符。9. 抽象方法在派生類中不能用base關(guān)鍵字會訪問。接口1. 每個組件都是獨立的,有其獨特的功能,只能通過接口與外界通訊,當(dāng)一個組件需要提供新的服務(wù)時,可以通過新的接口來實現(xiàn)。2. 組件應(yīng)該具有與編程語言無關(guān)的特性。組件模型是一種規(guī)范,不管采用哪種語言設(shè)計組件,都必須遵守這一規(guī)范。3. 在接口的聲明體中,可以定義接口的成員,接口的成員可以是方法,屬性,索引指示器和事件。4. 接口繼承和類繼承不同,接口繼承只是說明繼承。C#中類繼承只能是單繼承,但接口可以是多繼承。被繼承的接口應(yīng)該是訪問得到的,不能從private或internal類型的接口中繼承。5. 對一個接口的繼承也就繼承了這個接口的所有成員。6. 接口成員不能是常量,域,操作符,構(gòu)造函數(shù)或析構(gòu)函數(shù),而且不能包括所有的靜態(tài)成員。7. 接口成員默認(rèn)的訪問方式是public,接口成員聲明不能包含任何修飾符。與不能加abstract,public,protected.8. 如果底層成員的命名與高級成員的命名一樣,那么底層成員將覆蓋同名高級成員。但由于接口的多繼承性,如果兩個父成員具有兩個相同名的成員,這就產(chǎn)生了兩義性,這時需要顯示聲明 ,明確指出需要調(diào)用哪個父接口成員。9. 我們只需要記住一點:一旦成員被覆蓋以后,所有對其的訪問都被覆蓋后的成員“攔截”。10. 接口定義不包括方法的實現(xiàn)部分,接口可以通過類和結(jié)構(gòu)來實現(xiàn) 。用類來實現(xiàn)接口的時候,接口名稱必須包含在類聲明的基類列表中。如:class A:isequence,itest,如果類實現(xiàn)了接口,那么類也隱式地繼承了該接口的所有父接口,不管這些父接口有沒有在類的聲明的基類列表中出現(xiàn)。11. 一個類可以實現(xiàn)多個接口。如果類中每個成員都明顯地指出了被實現(xiàn)的接口,通過這種途徑被實現(xiàn)的接口我們稱之為顯式接口成員。顯式接口成員只能通過接口調(diào)用,而不能通過類調(diào)用。12. 不能在方法調(diào)用,屬性訪問,以及索引指示器訪問中通過全權(quán)名訪問顯式接口成員執(zhí)行體。事實上,顯式接口成員執(zhí)行體只通過接口的實例,僅僅引用接口的成員名稱來訪問。13. 顯式接口成員執(zhí)行體的接口必須顯式地出現(xiàn)在類的基類列表中,即使類隱式的實現(xiàn)了接口。14. 接口的成員包括它自己聲明的成員,而且包括該接口所有父接口聲明的成員。在接口的映射上,不僅要對接口聲明中顯式聲明的所有成員進(jìn)行映射,而且要對隱式地從父接口中繼承而來的接口成員進(jìn)行映射。包括與父接口中相同名稱的成員。15. 類必須為所有基類表中列出的所有接口成員提供具體的實現(xiàn)。16. 類中使用Private,protected和static修飾符的成員不能參與實現(xiàn)接口的映射。17. 如果子接口成員要覆蓋父接口的成員,成員的名字必須相同,而且子接口成員名稱前用new.18. 一個類繼承了它的基類提供的所有接口的實現(xiàn)。如果不顯式的重新實現(xiàn)接口,派生類就無法改變從基類中繼承來的接口映射。19. 顯式說明的接口成員不能被聲明為虛的。但可以通過顯式接口實現(xiàn)調(diào)用另一個方法,這個被調(diào)用的方法可以聲明為虛的。允許被派生類重載。20. 繼承了接口實現(xiàn)的類可以對接口進(jìn)行重實現(xiàn),這個接口要求是在類聲明的基類列表中出現(xiàn)過的。21. 抽象類允許將接口的方法映射到抽象的成員方法。顯式說明的接口成員不能是抽象的,但它允許調(diào)用抽象的方法。組織應(yīng)用程序1. 使用普通的函數(shù)庫,在程序鏈接時將庫中的代碼拷貝到可執(zhí)行文件中,這叫靜態(tài)鏈接。2. 動態(tài)鏈接庫不一樣,只有程序在使用時才將其拷貝,并且只有一份拷貝。動態(tài)鏈接庫是一種程序模塊,它不僅包括可執(zhí)行代碼,而且通常還包括了各種類型的預(yù)定義數(shù)據(jù)和資源。3. 裝配有兩種類型:應(yīng)用程序和庫。應(yīng)用程序都有一個入口,能常擴展名為:.exe。庫的擴展名:.dll.4. 名字空間的聲明要么在編譯單元(源文件)第一行,要么作為成員也現(xiàn)在別的名字空間中。5. 名字空間的成員可以是類,結(jié)構(gòu),枚舉,或代表等。也可以是另一個名字空間。6.

溫馨提示

  • 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

提交評論