【01_C#入門到精通】新手強(qiáng)烈推薦:C#開發(fā)課程,一整套課程

.Net:1. .Net平臺(tái)
2. .Net FrameWork框架(CLR:公共語言運(yùn)行池;.Net類庫)


C/S和B/S模式
啟動(dòng)方式:cmd——devenv

快速運(yùn)行程序快捷鍵:Fn+F5
console.writeline();在控制臺(tái)輸出括號(hào)中的內(nèi)容(以行為單位輸出)。
console.write().直接輸出,直到一行輸完才開始下一行
console.readkey();等待鍵盤輸入,退出程序。

C#中特有的數(shù)據(jù)類型(關(guān)鍵字)是小寫,大寫也可。例:string/String。
命名規(guī)則:1.變量名采用駝峰命名法;
2.類或方法每個(gè)單詞首字母大寫。
占位符:格式:{數(shù)字};
使用方法:一對(duì)一;
保留小數(shù)位數(shù):{0:00}——兩位小數(shù)
console.ReadLIne();接收用戶輸入內(nèi)容。
轉(zhuǎn)義符:一個(gè)“\”加上一個(gè)特殊的字符,組成了一個(gè)具有特殊意義的字符

@符號(hào):1.取消\在字符中的轉(zhuǎn)義作用
2.將字符串按照原格式輸出

小的轉(zhuǎn)大的:隱式類型轉(zhuǎn)換(自動(dòng)類型轉(zhuǎn)換)
大的轉(zhuǎn)小的:顯示類型轉(zhuǎn)換(強(qiáng)制類型轉(zhuǎn)換)
轉(zhuǎn)化前提:兩者類型兼容。
不兼容的數(shù)據(jù)類型轉(zhuǎn)換:convert.
基本語法:int a=convert.toint32(b);

方法四:int.parse():是以上三個(gè)方法的實(shí)質(zhì) (double.parse/decimal.parse。。。)
int.Tryparse():轉(zhuǎn)化失敗會(huì)...

if分支結(jié)構(gòu)
異常捕獲:try-catch 語法:try{可能會(huì)出現(xiàn)異常的代碼}catch{出現(xiàn)異常后執(zhí)行的代碼}

如果出現(xiàn)異常,執(zhí)行catch中的內(nèi)容,此時(shí)是b為false的時(shí)候執(zhí)行,那么下面if中b為true的時(shí)候才會(huì)執(zhí)行乘法操作;如果沒有異常,執(zhí)行try中內(nèi)容,此時(shí)b為true,if語句內(nèi)容也會(huì)執(zhí)行。
switch-case:用于處理多條件定值的判斷
語法:switch(變量或表達(dá)式的值)
{
case 值1:要執(zhí)行的代碼;
break;
case 值2:要執(zhí)行的代碼;
break;
...
default:要執(zhí)行的代碼;
break;
}

break:1.跳出swich-case結(jié)構(gòu)
2.跳出當(dāng)前循環(huán)
3.一般不單獨(dú)使用,與if判斷一起使用
While循環(huán):語法結(jié)構(gòu)while(循環(huán)條件){循環(huán)體;}
程序調(diào)試:

for循環(huán):語法格式:
for(表達(dá)式1;表達(dá)式2;表達(dá)式3){循環(huán)體}
continue(s):立即結(jié)束本次循環(huán),判斷循環(huán)條件,如果成立,則進(jìn)入下一次循環(huán),否者退出循環(huán)。
三元表達(dá)式:語法:
表達(dá)式1?表達(dá)式2:表達(dá)式3:

產(chǎn)生隨機(jī)數(shù):Random r=new Random();
int number=r.Next(1,11);
常量:const 變量類型 變量名=值;
枚舉: public enum 枚舉名
{
值1;
值2;
值3;
.......
}
作用:規(guī)范開發(fā),使代碼標(biāo)準(zhǔn)統(tǒng)一化。

枚舉類型與其他類型的轉(zhuǎn)換:

結(jié)構(gòu):聲明多個(gè)不同類型的變量
public struct 結(jié)構(gòu)名
{
成員;//字段
}
代碼規(guī)范:字段前加 _
數(shù)組:一次性儲(chǔ)存多個(gè)相同類型的變量(沒有賦值的話,數(shù)組中存的是0)
語法:數(shù)組類型【】 數(shù)組名=new 數(shù)組類型【數(shù)組長度】

冒泡排序
方法:public static 返回值類型 方法名 (參數(shù)列表)
{
方法體;
}
方法的調(diào)用:類名.方法名(參數(shù));

靜態(tài)字段模擬全局變量:
public static 類型 字段名

while(true):一直循環(huán)

out參數(shù):

ref參數(shù):好處:不用寫返回值

params可變參數(shù):

方法的重載:方法的名稱相同,但是參數(shù)不同。

方法的遞歸:方法自己調(diào)用自己。
面向?qū)ο螅ǚ庋b,繼承,多態(tài))
我們?cè)诖a中描述一個(gè)對(duì)象,通常描述這個(gè)對(duì)象的屬性和方法。

對(duì)象是根據(jù)類創(chuàng)建出來的。(類是對(duì)象的描述,對(duì)象是類的實(shí)例)
類:(不占內(nèi)存,對(duì)象占內(nèi)存)
public class 類名
{
字段;
屬性;
方法;
}
方法加上static:如果方法和Main()函數(shù)不在同一個(gè)類中,需要類名.方法名才能調(diào)用;
方法不加static:可以對(duì)象.方法名調(diào)用
this:代表當(dāng)前類的對(duì)象
屬性:保護(hù)字段,對(duì)字段的賦值和取值進(jìn)行限定。
屬性的本質(zhì)就是get()和set()方法.
先執(zhí)行set(),再執(zhí)行g(shù)et().
靜態(tài)與非靜態(tài)的區(qū)別:

靜態(tài)類使用時(shí)是通過類名.出來的,所有不能創(chuàng)建對(duì)象;非靜態(tài)類需要?jiǎng)?chuàng)建對(duì)象,使用時(shí)通過對(duì)象.出來。
何時(shí)使用靜態(tài)類
(1)如果你想要你的類當(dāng)作一個(gè)工具去使用,這時(shí)可以考慮將類寫成靜態(tài)類。(經(jīng)常需要用到的類)
(2)靜態(tài)類在整個(gè)項(xiàng)目中資源共享。

構(gòu)造函數(shù):名字與類名一樣
作用:初始化對(duì)象(給對(duì)象的每個(gè)屬性依次賦值)。
類本身有一個(gè)默認(rèn)的無參的構(gòu)造函數(shù)。

關(guān)鍵字New:

)4、隱藏從父類那里繼承過來的同名成員。
關(guān)鍵字this:
在一個(gè)構(gòu)造函數(shù)中,要重復(fù)另一個(gè)構(gòu)造函數(shù)中的參數(shù),可以通過在這個(gè)構(gòu)造函數(shù)的結(jié)尾用:this(需要的參數(shù))

析構(gòu)函數(shù):幫助程序釋放資源,或者不用析構(gòu)函數(shù),程序會(huì)調(diào)用垃圾回收器釋放資源。
命名空間:

在一個(gè)項(xiàng)目中引用另一個(gè)項(xiàng)目——使用”依賴項(xiàng)”添加引用
值類型:int,double,bool,decimal,struct,enum
值類型的值存儲(chǔ)在內(nèi)存的棧中
引用類型:string,自定義類,數(shù)組
引用類型的值存儲(chǔ)在內(nèi)存的堆中

字符串的不可變性:
再給一個(gè)已經(jīng)賦值的字符串重新賦值時(shí),老值并不會(huì)被覆蓋,而是重新開辟一個(gè)存儲(chǔ)空間來存儲(chǔ)新值(此時(shí)棧中的地址會(huì)指向新值的地址)

當(dāng)程序結(jié)束后,GC(垃圾回收器)掃描整個(gè)內(nèi)存,如果發(fā)現(xiàn)有新的空間沒有被指向,則立即把它銷毀。

字符串類型詳解:


繼承:在一些類中,將重復(fù)的成員單獨(dú)封裝到一個(gè)類中,作為這些類的父類
語法 子類:父類

子類繼承父類的屬性和方法,但子類并沒有繼承父類的私有字段;子類并沒有繼承父類的構(gòu)造函數(shù),但子類會(huì)默認(rèn)調(diào)用父類無參數(shù)的構(gòu)造函數(shù),創(chuàng)建父類對(duì)象,讓子類可以使用父類的成員。
所以,如果在父類中重寫一個(gè)有參數(shù)的構(gòu)造函數(shù)后,那個(gè)無參數(shù)的就被干掉了,子類就調(diào)用不到,所以子類會(huì)報(bào)錯(cuò)。
解決方法:
(1)在父類中重新寫一個(gè)無參數(shù)的構(gòu)造函數(shù)
(2)在子類中顯示的調(diào)用父類的構(gòu)造函數(shù),使用關(guān)鍵字:base(需要傳給父類的東西).

里氏轉(zhuǎn)換:
(1)子類可以賦值給父類:如果有一個(gè)地方需要一個(gè)父類作為參數(shù),我們可以給一個(gè)子類代替。
(2)如果父類裝的是子類對(duì)象,那么可以將這個(gè)父類強(qiáng)轉(zhuǎn)為子類對(duì)象。、
is:表示類型轉(zhuǎn)換,轉(zhuǎn)換成功返回一個(gè)true,否則false。
as:表示類型轉(zhuǎn)換,轉(zhuǎn)換成功則返回對(duì)應(yīng)的對(duì)象,否則返回一個(gè)null


protected:受保護(hù)的
可以在當(dāng)前類的內(nèi)部以及該類的子類中訪問。
ArrayList:集合
長度可以任意改變,類型隨便。
ArrayList list=new ArrayList();

ArrayList長度問題:
每次集合中實(shí)際包含的元素個(gè)數(shù)(count)超過了可以包含的元素個(gè)數(shù)(capcity)時(shí),集合就會(huì)向內(nèi)存中申請(qǐng)多開辟一倍的空間,來保證集合的長度一直夠用。
Hashtable:鍵值對(duì)集合(根據(jù)鍵去找值)。
鍵值對(duì)集合中,鍵必須是唯一的,值是可以重復(fù)的。
Hashtable tb=new Hashtable();
鍵值對(duì)對(duì)象【鍵】=值;

var:根據(jù)值能夠推斷出類型(聲明的同時(shí)必須賦初值)

List泛型集合:
List<int> list=new List<int>();
裝箱、拆箱:
裝箱:將值類型轉(zhuǎn)換為引用類型。
拆箱:將引用類型轉(zhuǎn)換為值類型。

Dictionary:字典集合
Dictionary<int,string> dic=new Dictionary<int,string>();

FileStream:文件流(操作字節(jié))

StreamReader、StreamWriter操作字符
文件的讀取方式:(FileAccess)—針對(duì)文件中數(shù)據(jù)的操作
包括三個(gè)枚舉:
FileAccess.Read(對(duì)文件讀訪問)
FileAccess.Write(對(duì)文件進(jìn)行寫操作)
FileAccess.ReadWrite(對(duì)文件讀或?qū)懖僮?
文件打開模式:(FileMode)

文件流中字符,字節(jié),字符串之間轉(zhuǎn)換:
利用語句:Encoding.(轉(zhuǎn)化的字符格式).(Get數(shù)據(jù)類型)


多態(tài):讓一個(gè)對(duì)象能夠表現(xiàn)出多種狀態(tài)(類型)
實(shí)現(xiàn)多態(tài)的方法:
1.虛方法:將父類的方法標(biāo)記為虛方法,使用關(guān)鍵字virtual。(這個(gè)函數(shù)可以被子類重新寫一遍,子類添加關(guān)鍵字override)
2.抽象類(不允許創(chuàng)建對(duì)象):當(dāng)父類中的方法不知道如何去實(shí)現(xiàn)的時(shí)候,可以考慮將父類寫成抽象類,將方法寫成抽象方法。(父類和方法都加關(guān)鍵字abstract,然后讓繼承他的類也就是子類進(jìn)行重寫)

3.接口(實(shí)現(xiàn)多繼承時(shí)就用接口)
public interfce I...able(接口名)
(1)接口中的成員不允許添加訪問修飾符,默認(rèn)就是public。
(2)不允許寫具有方法體的函數(shù)
(3)接口中只能有方法(屬性的本質(zhì)也是方法)
(4)接口中的成員的不能有任何實(shí)現(xiàn)。
(5)接口與接口之間可以多繼承
顯示實(shí)現(xiàn)接口:(解決方法重名問題)

自動(dòng)屬性:

訪問修飾符:

值類型在復(fù)制的時(shí)候,傳遞的是這個(gè)值的本身
引用類型在復(fù)制的時(shí)候,傳遞的是這個(gè)對(duì)象的引用
序列化:將對(duì)象轉(zhuǎn)化為二進(jìn)制。
反序列化:將二進(jìn)制轉(zhuǎn)化為對(duì)象。
作用:傳輸數(shù)據(jù)

部分類:解決兩個(gè)類同名問題

密封類:不能被繼承
