1. 程式人生 > >[C#] CSharp 基本語法

[C#] CSharp 基本語法

windows library 命名方式 編譯器 帕斯卡

一、基礎

1.規範:

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

2.編譯:

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

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

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

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

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

3.面向對象(Object-Oriented 面向對象編程:Object-Oriented-Programming):

類是抽象的,對象是具體的.

析構函數:~ClassName(){}.實際是重寫基類的Finalize()方法

4.變量:

成員變量:默認有一個初始值.string->null,int->0,bool->false

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

5.封裝:

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

6.繼承:

單根性,傳遞性

構造函數不繼承.

7.多態:

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

b.abstract方法

c.接口

8.訪問修飾符:

成員訪問修飾符:
private:當前類內

protected:當前類內和子類內

internal:當前程序集內

protected internal:當前程序集內當前類內和子類內

public:所有都可以

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

只允許使用public和internal,但是微軟內部使用private.

9.靜態:

靜態作為與多態區別的.stati修飾.

靜態類:不能被實例化,成員都為靜態成員,可以有const常量

靜態成員:靜態成員在賦初始值的時候,是在靜態構造函數中賦值的.

靜態構造函數:在類第一次使用前只調用一次.不能有修飾符,不能重載.

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

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

引用類型:string 類 數組等隱式繼承Object.

值傳遞:默認就是值傳遞.

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

11.SOLID:

single:單一職責

open:開發封閉

lis:裏氏替換

interface:接口分離

depend:依賴倒置

面向對象設計的SOLID原則

12.接口:

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

b.接口的成員不能有修飾符.默認為public

13.實現接口和顯示實現接口:

一個類同時實現接口和顯示實現接口。

顯示實現接口:當被調用的是接口的時候,則調用顯示接口的方法

實現接口:默認執行實現接口的方法.

14.類型轉換:

隱式轉換:當小範圍的類型轉大範圍的類型.

強制轉換:當指定的大範圍的類型對象可以轉小範圍類型的時候用(類型名)或者as進行轉換

convert:語義轉換

parse:將其他類型轉換成數字類型

15.單位:

1byte = 8bit

1kb = 1024byte

Int32 = int : 4byte

16.異常處理:

錯誤類型:語法錯誤/邏輯錯誤/運行錯誤

throw; :在catch中執行就是將異常繼續往上拋

在try-catch-finally中,註意return的問題.本質都是編譯把return拿到最下面.通過反編譯工具可以看到return的值會單獨拿個變量接受

17.參數修飾符:

params:可變參數

out:傳出參數

ref:引用傳遞,本質在傳參數的值的時候,傳遞的是該變量的內存地址

18.字符串:

1.字符串不可變性:實際雙引號裏的字符串 都是常量.普通聲明的常量,是聲明一個常量的變量接受一個常量.

2.字符串拘留池:正是因為字符串的不可變性,所以提出了這個池的技術,實際就是把字符串的內容當做鍵,字符串的地址當做值.

3.StringBuilder:在字符串拼接時,一定要使用該對象.否則將不斷創建string對象.並且非常建議給定初始值.

C# 字符串拘留池機制

19.垃圾回收 GC:

回收對象:托管資源內存中的堆對象.

回收時間:不確定

垃圾回收分3代.當第一代空間滿的時候,就回收第一代資源,並把沒有回收的對象移到第二代中.依次類推.非常不建議手動垃圾回收.

20.集合:

集合和數組 表面上一個是不定長度 一個固定長度. 實際本質集合的內部維護著一個數組.當增加一個元素的時候,會重新一個new一個數組

常見集合:

ArrayList       List<T>

Hashtable       Dictionary<T,T>                                                           

Stack         Stack<T>LIFO

Queue        Queue<T>

微軟建議使用泛型類的集合.本質原因也是因為減少裝箱拆箱的次數.

21.裝箱拆箱

裝箱拆箱發生在發生在父子類之間的.

裝箱:值類型轉成引用類型.常轉成Object,值類型實現的接口.

拆箱:引用類型轉成值類型.常在強制轉換成值類型中出現

22.Path File Directory FileInfo DirectoryInfo Stream StreamWriter StreamReader

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

以流的形式 會減輕設備的壓力.不會出現一下子全讀完才執行後續操作.

23.編碼

ASCII  GB2312  GBK  UNICODE  UTF-8

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

實際字符串存儲在計算機上都是數字,以byte[]的方式存儲.

亂碼的原因就是存的編碼和讀的編碼不一致導致的

24.序列化

序列化步驟:創建序列化器,序列化或者反序列化.

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

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

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

序列化:將對象狀態保存到存儲設備.

25.委托/事件

委托本質就是一個類型

事件是委托的對象,本質是一個私有的委托對象和2個public的方法.所以事件只有類內部能調用!

26.匿名

匿名方法:delegate(參數){方法體} 多用於委托對象賦值,本質是編譯器起了一個名字.

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

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

27.泛型

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

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

28.擴展方法

擴展方法:靜態類 靜態方法 第一個參數類型就是要擴展的類型

本質是編譯器把擴展的類型作為參數傳到靜態方法中.

29.程序集

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

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

公共的Assembly在GAC中,所以編譯的時候,默認導入的程序集不會輸出.

30.Type Assembly

描述類的類型.通過Type對象,可以實例化出這個Type所指的類型的對象.

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

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

根據Type創建對象:Activator.CreateInstance(Type對象名)

31.XML

可擴展標記語言:區分大小寫,一個根節點,屬性值雙引號,CDATA區,註釋和html一樣,文檔申明的編碼和實際編碼要一致.

32.深拷貝 淺拷貝

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

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

33.正則表達式

正則表達式是描述字符串特征的表達式

元字符(反斜杠):

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

  .    :  單個任意字符除了換行符

  []    :  取中括號內任意一個字符

  |    :  或的優先級非常低

  {n,m} :  前面的字符出現n到m次

  *    :  0次或多次

  ?    :  0次或1次

  +    :  1次或多次

  \d    :  0-9

  \s    :  空白

  \w    :  0-9a-zA-Z_  單個字符

  \b    :  單詞邊界

  ^    :  head

  $    :  end


[C#] CSharp 基本語法