您好,登錄后才能下訂單哦!
一、基礎
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
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。