溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

[C#] CSharp 基本語法

發(fā)布時(shí)間:2020-06-14 17:30:06 來源:網(wǎng)絡(luò) 閱讀:314 作者:鄒君安 欄目:系統(tǒng)運(yùn)維

一、基礎(chǔ)

1.規(guī)范:

除常量外,所有變量用駝峰命名方式,其它用帕斯卡命名方式.

 

2.編譯:

首先由csc.exe將cs文件編譯成MSIL.當(dāng)雙擊exe的時(shí)候,會(huì)由clr的jit(just in time)編譯器再次編譯成cpu指令.

csc位置(如):C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe

csc命令(如):csc /t:library acme.cs(編譯成類庫(kù)) csc /r:acme.dll test.cs(引用acme.dll后編譯)

ngen位置(如):C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe(可實(shí)現(xiàn)jit效果)

ngen命令(如):ngen install D:\SystemTool\HelloWorld.exe  (備注:exe方式)

 

3.面向?qū)ο?Object-Oriented 面向?qū)ο缶幊?Object-Oriented-Programming):

類是抽象的,對(duì)象是具體的.

析構(gòu)函數(shù):~ClassName(){}.實(shí)際是重寫基類的Finalize()方法

 

4.變量:

成員變量:默認(rèn)有一個(gè)初始值.string->null,int->0,bool->false

局部變量:使用前必須賦值.

 

5.封裝:

 a.字段封裝成屬性 b.方法參數(shù)封裝成類 c.方法重用 d.封裝成類庫(kù)

 

6.繼承:

單根性,傳遞性

構(gòu)造函數(shù)不繼承.

 

7.多態(tài):

a.vitual和override方法可以給重寫

b.abstract方法

c.接口

 

8.訪問修飾符:

成員訪問修飾符:
private:當(dāng)前類內(nèi)

protected:當(dāng)前類內(nèi)和子類內(nèi)

internal:當(dāng)前程序集內(nèi)

protected internal:當(dāng)前程序集內(nèi)當(dāng)前類內(nèi)和子類內(nèi)

public:所有都可以

命名空間下的訪問修飾符:

只允許使用public和internal,但是微軟內(nèi)部使用private.

 

9.靜態(tài):

靜態(tài)作為與多態(tài)區(qū)別的.stati修飾.

靜態(tài)類:不能被實(shí)例化,成員都為靜態(tài)成員,可以有const常量

靜態(tài)成員:靜態(tài)成員在賦初始值的時(shí)候,是在靜態(tài)構(gòu)造函數(shù)中賦值的.

靜態(tài)構(gòu)造函數(shù):在類第一次使用前只調(diào)用一次.不能有修飾符,不能重載.

 

10.值類型與引用類型 值傳遞與引用傳遞:

值類型:int double struct等隱式繼承ValueType.

引用類型:string 類 數(shù)組等隱式繼承Object.

值傳遞:默認(rèn)就是值傳遞.

引用傳遞:在方法參數(shù)中加上ref就是引用傳遞.

 

11.SOLID:

single:單一職責(zé)

open:開發(fā)封閉

lis:里氏替換

interface:接口分離

depend:依賴倒置

面向?qū)ο笤O(shè)計(jì)的SOLID原則

 

12.接口:

a.接口里只能定義方法.

b.接口的成員不能有修飾符.默認(rèn)為public

 

13.實(shí)現(xiàn)接口和顯示實(shí)現(xiàn)接口:

一個(gè)類同時(shí)實(shí)現(xiàn)接口和顯示實(shí)現(xiàn)接口。

顯示實(shí)現(xiàn)接口:當(dāng)被調(diào)用的是接口的時(shí)候,則調(diào)用顯示接口的方法

實(shí)現(xiàn)接口:默認(rèn)執(zhí)行實(shí)現(xiàn)接口的方法.

 

14.類型轉(zhuǎn)換:

隱式轉(zhuǎn)換:當(dāng)小范圍的類型轉(zhuǎn)大范圍的類型.

強(qiáng)制轉(zhuǎn)換:當(dāng)指定的大范圍的類型對(duì)象可以轉(zhuǎn)小范圍類型的時(shí)候用(類型名)或者as進(jìn)行轉(zhuǎn)換

convert:語義轉(zhuǎn)換

parse:將其他類型轉(zhuǎn)換成數(shù)字類型

 

15.單位:

1byte = 8bit

1kb = 1024byte

Int32 = int : 4byte

 

16.異常處理:

錯(cuò)誤類型:語法錯(cuò)誤/邏輯錯(cuò)誤/運(yùn)行錯(cuò)誤

throw; :在catch中執(zhí)行就是將異常繼續(xù)往上拋

在try-catch-finally中,注意return的問題.本質(zhì)都是編譯把return拿到最下面.通過反編譯工具可以看到return的值會(huì)單獨(dú)拿個(gè)變量接受

 

17.參數(shù)修飾符:

params:可變參數(shù)

out:傳出參數(shù)

ref:引用傳遞,本質(zhì)在傳參數(shù)的值的時(shí)候,傳遞的是該變量的內(nèi)存地址

 

18.字符串:

1.字符串不可變性:實(shí)際雙引號(hào)里的字符串 都是常量.普通聲明的常量,是聲明一個(gè)常量的變量接受一個(gè)常量.

2.字符串拘留池:正是因?yàn)樽址牟豢勺冃?所以提出了這個(gè)池的技術(shù),實(shí)際就是把字符串的內(nèi)容當(dāng)做鍵,字符串的地址當(dāng)做值.

3.StringBuilder:在字符串拼接時(shí),一定要使用該對(duì)象.否則將不斷創(chuàng)建string對(duì)象.并且非常建議給定初始值.

C# 字符串拘留池機(jī)制

 

19.垃圾回收 GC:

回收對(duì)象:托管資源內(nèi)存中的堆對(duì)象.

回收時(shí)間:不確定

垃圾回收分3代.當(dāng)?shù)谝淮臻g滿的時(shí)候,就回收第一代資源,并把沒有回收的對(duì)象移到第二代中.依次類推.非常不建議手動(dòng)垃圾回收.

 

20.集合:

集合和數(shù)組 表面上一個(gè)是不定長(zhǎng)度 一個(gè)固定長(zhǎng)度. 實(shí)際本質(zhì)集合的內(nèi)部維護(hù)著一個(gè)數(shù)組.當(dāng)增加一個(gè)元素的時(shí)候,會(huì)重新一個(gè)new一個(gè)數(shù)組

常見集合:

ArrayList        List<T>

Hashtable       Dictionary<T,T>                                                           

Stack         Stack<T>LIFO

Queue        Queue<T>

微軟建議使用泛型類的集合.本質(zhì)原因也是因?yàn)闇p少裝箱拆箱的次數(shù).

21.裝箱拆箱

裝箱拆箱發(fā)生在發(fā)生在父子類之間的.

裝箱:值類型轉(zhuǎn)成引用類型.常轉(zhuǎn)成Object,值類型實(shí)現(xiàn)的接口.

拆箱:引用類型轉(zhuǎn)成值類型.常在強(qiáng)制轉(zhuǎn)換成值類型中出現(xiàn)

 

22.Path File Directory FileInfo DirectoryInfo Stream StreamWriter StreamReader

路徑 文件 目錄 文件信息 目錄信息 流 寫入流 讀入流

以流的形式 會(huì)減輕設(shè)備的壓力.不會(huì)出現(xiàn)一下子全讀完才執(zhí)行后續(xù)操作.

 

23.編碼

ASCII  GB2312  GBK  UNICODE  UTF-8

Encoding.GetEncodings()取計(jì)算機(jī)所有編碼

實(shí)際字符串存儲(chǔ)在計(jì)算機(jī)上都是數(shù)字,以byte[]的方式存儲(chǔ).

亂碼的原因就是存的編碼和讀的編碼不一致導(dǎo)致的

 

24.序列化

序列化步驟:創(chuàng)建序列化器,序列化或者反序列化.

xml序列化: XmlSerializer 類 (System.Xml.Serialization) 

js序列化:JavaScriptSerializer 類 (System.Web.Script.Serialization)

二進(jìn)制序列化:BinaryFormatter類(System.Runtime.Serialization.Formatters.Binary)

序列化:將對(duì)象狀態(tài)保存到存儲(chǔ)設(shè)備.

 

25.委托/事件

委托本質(zhì)就是一個(gè)類型

事件是委托的對(duì)象,本質(zhì)是一個(gè)私有的委托對(duì)象和2個(gè)public的方法.所以事件只有類內(nèi)部能調(diào)用!

 

26.匿名

匿名方法:delegate(參數(shù)){方法體} 多用于委托對(duì)象賦值,本質(zhì)是編譯器起了一個(gè)名字.

Lambda:語句:(參數(shù))=>{方法體} 表達(dá)式(只有一個(gè)參數(shù),方法體只有一句話的時(shí)候)例如:x=>x+2;

匿名類型例:new {Code = ViewBag.Code};匿名類型的屬性是只讀的!本質(zhì)匿名類型的字段都是私有的readonly,封裝成只讀的屬性.

 

27.泛型

泛型支持:類 方法 委托 接口

泛型約束:where T: class struct new() 類名 接口名

 

28.擴(kuò)展方法

擴(kuò)展方法:靜態(tài)類 靜態(tài)方法 第一個(gè)參數(shù)類型就是要擴(kuò)展的類型

本質(zhì)是編譯器把擴(kuò)展的類型作為參數(shù)傳到靜態(tài)方法中.

 

29.程序集

.net生成的exe和dll都是程序集.

包括類型元數(shù)據(jù),程序集元數(shù)據(jù),資源文件,MSIL中間語言.

公共的Assembly在GAC中,所以編譯的時(shí)候,默認(rèn)導(dǎo)入的程序集不會(huì)輸出.

 

30.Type Assembly

描述類的類型.通過Type對(duì)象,可以實(shí)例化出這個(gè)Type所指的類型的對(duì)象.

Type:通過Typeof(類名),GetType(對(duì)象名)

Assembly:Assembly.LoadFrom(程序集名)返回一個(gè)Assembly對(duì)象.GetType(類的限定名)獲得指定的類的Type對(duì)象.

根據(jù)Type創(chuàng)建對(duì)象:Activator.CreateInstance(Type對(duì)象名)

 

31.XML

可擴(kuò)展標(biāo)記語言:區(qū)分大小寫,一個(gè)根節(jié)點(diǎn),屬性值雙引號(hào),CDATA區(qū),注釋和html一樣,文檔申明的編碼和實(shí)際編碼要一致.

 

32.深拷貝 淺拷貝

深拷貝是所有成員都在內(nèi)存中拷貝一份.通過序列化可以完成深拷貝.

淺拷貝:除了深拷貝,都是淺拷貝,MemberwiseClone()可以直接拷貝.

 

33.正則表達(dá)式

正則表達(dá)式是描述字符串特征的表達(dá)式

元字符(反斜杠):

  .  []  |  ()  {n,m}  *  ?  +  \d  \s  \w  \b  ^  $

  .    :  單個(gè)任意字符除了換行符

  []     :  取中括號(hào)內(nèi)任意一個(gè)字符

  |    :  或的優(yōu)先級(jí)非常低

  {n,m} :  前面的字符出現(xiàn)n到m次

  *    :  0次或多次

  ?    :  0次或1次

  +    :  1次或多次

  \d    :  0-9

  \s    :  空白

  \w    :  0-9a-zA-Z_  單個(gè)字符

  \b    :  單詞邊界

  ^    :  head

  $    :  end

 


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI