1、 Console.WriteLine():打印到控制檯並換行
2、 C#類型:值類型、引用類型
3、 namespace:不同文件夾下的類可以屬於同一個namespace
4、 字符串相加:使用(+)操作符,任何其他對象與字符串相加都會自動調用ToString()
5、 字符串存儲:str1 = “111”; str2 = “111”,str1和str2指向同一地址
6、 字符串比較:只要str1和str2內容相同,str1 == str2表達式都會返回true。==操作符被String重載
7、 整型:byte、short、int、long,都有相應的有/無符號版本,其中byte是無符號的,其他是有符號的
8、 浮點型:float、double、decimal,只有有符號版本
9、 值類型中的數值型:都包含MinValue、MaxValue屬性,可以直接由類型通過(.)操作符訪問
10、 強制類型轉換:(())操作符,如int i = (int)c;
11、 char:字符型,Unicode編碼(16位)。可看作無符號整型,可以使用ushort以上的類型強制類型轉換。
12、 char/Unicode碼段常量:數字0-9(48-57),大寫字母A-Z(65-90),小寫字母a-z(97-122)
13、 特殊字符:’\t’-製表位;’\n’-換行符
14、 賦值語句/表達式:賦值語句在表達式中只計算左值,計算前已經將右值計算結果賦予左值
15、 bool:邏輯型,只有兩個值,true/false
16、 出現在字符串中的雙引號:寫法爲(\")
17、 數值、char、bool的Parse()方法:基礎值類型都包含該方法,將字符串轉爲本類型變量
18、 數值型.Parse():參數如果不是數值,或者越界,將返回異常
19、 編譯器捕獲數值計算越界:在編譯期判斷是否越界,如果判斷越界,則根本不可能編譯成功
20、 未捕獲的數值計算越界(如方法調用):則回到數值型範圍開始處。即MaxValue + 1:MinValue
21、 sizeof:返回類型所佔字節數。如,sizeof(int)返回4
22、 Framework類型與CLS(公共語言子集):所有類型都是定義在Framework中,語言本身沒有類型
23、 值類型:結構(struct)、枚舉(enum)
24、 C#預定義的13種值類型:.net結構的別名
25、 常用值類型別名:Int32-int,Char-char, Double-double,Boolean-bool
26、 常用類別名:Object-object,String-string
27、 struct:直接聲明即可使用。如struct Person{……},Person bily; bily.name=”bily”;
28、 enum:一組預定義的值。
ü enum中的值爲int型,不可定義爲其他類型(比int小的類型會隱式類型轉換)
ü 如果不指定數值,則從0開始遞增1
ü 可以指定數值,此時,其後如果不指定數值,則在前一基礎上遞增1
29、 存儲:棧,固定大小的存儲空間,效率高;堆,不固定大小的存儲空間,靈活性大
ü 棧:值類型、引用類型的句柄(地址值,32位機上是32位(4字節),64位機上8字節)
ü 堆:引用類型的對象
30、 引用類型:棧中存儲句柄,堆中存儲對象,句柄指向對象
31、 new:在堆中分配空間。所以,struct對象不用new,定義即可使用;class對象需要new
32、 string:是String類的別名,是一種非常特殊的類型
ü 創建對象:可以使用string s = new String(“111”)方式,也可以直接使用string s = ”111”方式
ü 內存開銷:如果已經存在string s1 = “111”; 則string s2 = “111”; 直接返回s1句柄存儲的地址
33、 賦值語句(=):在棧中實現一次複製,將右值賦值給左值
ü 引用類型的賦值語句:複製句柄存儲的地址
34、 %:10 % -3是1;(10 / -3 = -3……1)
35、 bool:true/false,可以通過(1)定義bool型;(2)關係表達式;(3)邏輯表達式;(4)條件布爾表達式;(5)函數返回值獲得,作爲判斷、循環語句的條件使用
36、 邏輯操作符
ü 非(!):取反,!true是false;!false是true
ü 與(&):兩操作數都是true,結果才爲true,其他爲false
ü 或(|):兩操作數都是false,結果才爲false,其他爲true
ü 異或(^):兩操作數不同,結果爲true,其他爲false
37、 條件布爾操作符:&&與,||或,作用與邏輯操作符中的&,|完全相同,但採用部分運算,因此效率較高,在實際編程中也可以避免一些錯誤。
ü bool-expression1 && bool-expression2:如果bool-expression1是false,則不再計算bool-expression2
ü bool-expression1 || bool-expression2:如果bool-expression1是true,則不再計算bool-expression2
舉例:
if (list != null && list.Count != 0) { },如果list是null,則list != null返回false,不再計算list.Count != 0;
if (list != null & list.Count != 0) { },當list爲null時,list != null表達式返回false,list.Count != 0表達式會跑出NullReferenceException異常
38、 三元操作符(? :):obj = bool-expression ? obj1 : obj2;
ü bool-expression如果爲true,則執行obj = obj1; 否則,執行obj = obj2;
39、 switch:開關語句。
ü 開關條件:整型(byte,short,char,int,long)、字符串
ü 執行描述:從第一個匹配的case起執行,到break/return語句出現爲止
ü 要求:一旦某個case中包含執行代碼,則必須break/return
40、 臨時變量必須初始化後才能使用。PS:臨時變量,方法、構造器等中出現的變量
41、 數組中的元素會被初始化
42、 數組元素訪問越界,會產生IndexOutOfRangeException異常
43、 二維數組:理解爲每一個元素都是一維數組的數組。設爲biArr
ü biArr.Length:二維數組有多少個元素
ü biArr[i].Length:二維數組的第i個元素內有多少個元素
ü 訪問二維數組的元素的元素,使用[][]操作符
ü 如果所選擇的下標越界,將產生IndexOutOfRangeException異常
44、 變量的生存週期
ü 臨時變量:從定義的那一行起,到靠它最近的{}結尾符止。生存週期以外,不可見
45、 方法原型:<返回值類型> <方法名> ([類型 形參, 類型 形參…]) {方法體}
46、 方法的特徵:方法名、參數表(數量、類型、順序)
ü 方法的返回值類型不在其列
ü 方法的參數名稱不在其列
47、 VS操作[解決方案、項目、引用、Main方法]
ü 一個解決方案內可能包含多個項目,可以通過 [設爲啓動項目]來告知VS默認啓動的項目,此時啓動程序將選擇默認啓動的項目下的Main方法
ü 項目之間使用到彼此的類定義時,需要通過[添加引用]操作,將需要用到的項目引入本項目中
48、 static:屬於類的
ü static類:只包含static成員
ü static成員:只能由類通過(.)操作符訪問;不能通過對象來訪問
ü 實例方法可以訪問static成員,static方法不能訪問實例成員
49、 const:常量,直接使用類通過(.)操作符訪問,不能通過對象來訪問。
ü const隱含了static定義
50、 readonly和cosnt的異同:
ü 異:(1)readonly修飾實例字段,const修飾類字段;(2)readonly可以在聲明和構造函數兩處賦值,const只能在聲明時賦值。
ü 同:一經賦值,不可改變
51、 internal:C#頂層類(namespace下直接定義的類,而不是內部類)定義默認訪問權限符
ü 當前項目內可以訪問
52、 能夠訪問頂層類的權限符:public(所有項目均可見)、internal(本項目內可見)
53、 構造函數的原型:類名 ([類型 形參, 類型 形參…]) {方法體}
54、 構造函數
ü 如果不定義構造函數,編譯器將生成默認構造函數(public、無參、無內容)
ü 只要定義構造函數,編譯器將不再生成
55、 重載:[方法、構造函書] 名稱相同、參數表不同
56、 類定義中,數據成員(即字段)是有默認值的
ü 數值型:0
ü 字符型:Unicode-0
ü bool:false
ü 引用類型:null
57、 構造器重載的this寫法:以Book類爲例,假設Book包含一個定義了名稱和價格的構造器,此時重載一個只有名稱的構造器。public Book(string name) : this(name, 0) { }
58、 構造器重載的設計思路:由簡入繁,每次需要添加代碼;由繁入簡,每次需要傳入默認值。
ü 使用第二種,先定義包含字段最多的構造器,重載包含字段較少的構造器時,使用this調用
59、 析構函數:在對象被釋放前,由垃圾收集器調用
ü 寫法爲:~+類名,沒有訪問類型符、返回值類型、參數表
60、 面向對象三要素:封裝、繼承、多態
61、 C#訪問權限符:private、protected、internal、internal protected、public
62、 類內部默認訪問權限符:private
63、 protected internal:子類和當前項目內的類都能訪問的權限,書寫不分先後
64、 方法參數傳遞:ref和out的異同
ü 相同點:
n 方法定義和方法調用時都需要明確標識
n 屬性不可作爲ref/out參數傳遞
ü 不同點:
n out參數可以沒有初值
n out參數在方法定義中必須被初始化
65、 delegate:委託,指向方法的指針
ü 與class、struct、enum平級,在namespace中定義
ü 定義原型:delegate 返回值類型 委託名 (參數表);
ü 委託定義原型中,返回值類型和參數表正是方法原型的組成部分,委託也正是爲指向具體方法而存在的。我們定義了一個委託後,可以使用該委託指向一個返回值類型和參數表都相同的方法,並通過委託執行該方法。
ü 委託的使用與類相同,使用new創建委託對象,但是需要傳入方法名作爲參數
66、 一個解決方案可以有多個項目,每個項目都可以且僅可以有一個含Main方法的類。如果一個項目中有兩個Main方法,VS將提示“定義了不止一個入口點”,編譯失敗。
67、 類繼承定義中,不允許派生類的可訪問性比其基類更高。否則VS將提示“基類比派生類的可訪問性低”,編譯失敗。
ü 基類public,派生類public/internal
ü 基類internal,派生類internal
68、 Object:所有類的基類,在C#中擁有一個別名:object
ü C#類體系爲單根繼承結構,所有類都直接或間接繼承自Object,幷包含一系列方法
n Equals,判斷兩個對象是否相等。默認判斷兩個句柄是否指向同一對象,故而總需要複寫
n GetHashCode,返回對象散列碼。如果複寫了Equals,總需要複寫GetHashCode,原則是Equals返回true時,GetHashCode必須返回相同的數值。
n GetType:返回類型信息
n ToString:作爲字符串的展現
69、 調用繼承類構造函數:基類如果沒有默認構造函數,而派生類構造函數也沒有顯式調用基類構造函數,將無法通過編譯。
70、 this和base
ü this
n 當前對象,類定義中所有實例方法、字段、屬性等操作都默認隱含this標識符。
n 作爲構造函數訪問符,可以在構造函數定義中,調用本類其他的構造函數
ü base
n 基類對象,每個類的對象中都隱含包括了基類的子對象,可以通過base訪問基類的成員
n 作爲構造函數訪問符,可以在構造函數定義中,調用基類的構造函數
71、 抽象類:abstract class,必須被繼承並實現所有抽象方法後才能被實例化的類
ü 抽象類不能被實例化
ü 抽象類可以包含抽象方法;包含抽象方法的必須是抽象類
n 抽象方法(abstract method):只有方法聲明,沒有具體實現的方法。
ü 繼承抽象類,必須實現其所有抽象方法,纔可以實例化。如果不能全部實現,則派生類仍必須聲明爲抽象類
72、 密封類:sealed class:不能被繼承的類
73、 接口:interface,純粹的抽象類。注意:
ü 所有方法都是抽象方法(不可包含代碼體)
ü 不允許使用訪問修飾符修飾方法(包括public,儘管默認訪問權限符就是public)
ü 不能包含字段成員,但可以包含屬性聲明
ü 不能使用static、virtual、abstract、sealed關鍵字修飾
74、 關於類的繼承:
ü 只能繼承自一個類,但可以繼承多個接口
ü 同時繼承自類和接口時,必須將基類寫在前面,接口寫在後面,中間用逗號隔開
75、 普通類的繼承:
ü 子類方法默認不會覆蓋父類方法,即假使父類和子類含有同樣的方法聲明,那麼使用父類句柄訪問對象的該方法,將調用父類的方法定義(不管對象實際上是父類對象還是子類對象)
ü 子類方法覆蓋父類方法,需要顯式將父類方法聲明爲virtual、子類方法聲明爲override
n virtual:虛方法,擁有具體實現,但是標識出該方法可能被覆寫
n override:說明該方法覆寫了父類的同名方法
76、 如果父類方法聲明爲virtual,而子類定義了同名方法,但是並不想覆寫父類方法,此時需要在子類方法聲明的最前方添加new標識符。
ü 如果不添加new,不會報錯,只會報警告
77、 static成員不可被繼承(override),但可能被隱藏
78、 抽象類的繼承:抽象方法聲明爲abstract,實現抽象方法時,且必須聲明爲override
79、 接口的繼承:實現接口方法不需要且不能添加override關鍵字
80、 覆寫(override)方法時,派生類方法的訪問權限不能發生改變(java:派生類方法的訪問權限不能比基類的低)
81、 默認訪問權限:類型(類、接口、結構等):internal;類的成員:private;接口的成員:public
82、 protected:子類可以訪問到的成員
ü 包括整個基類體系的protected成員,並不只是直接基類的protected成員
83、 假如(1)interface I1, I2(2)class C : I1,I2(3)f(I1); f(I2);,此時,調用f(new C())將發生調用不明確錯誤
ü 解決方法:定義I1、I2接口的父接口,重寫f方法。(1)I1:I、I2:I;(3)f(I)
84、 is:is表達式判別一個對象是否屬於某個類型,如果是,返回true,反之,返回false
85、 as:強制類型轉換的無異常寫法。Cat c = (Cat)o; --<1>的as寫法爲:Cat c = o as Cat; --<2>。1、2功能相同,但是,如果o對象不是Cat類型,則1寫法將拋出異常,2寫法會自動將c賦爲null
86、 多態:同樣的代碼,不同的行爲
ü 針對基類型或接口定義行爲,使用不同派生類的對象調用,將實現不同的行爲
87、 extern:定義外部函數,通常用來引用外部DLL中定義好的方法。
ü 表示當前文件中使用的函數,在外部被定義
88、 typeof:獲取類型的 System.Type 對象
ü 該關鍵字是Type類的別名
ü 該關鍵字直接作用於類型名,即typeof(TypeName),如果要通過對象獲取其類型的Type對象,使用o.GetType()方法
91、 異常
C# 語言的異常處理功能提供了處理程序運行時出現的任何意外或異常情況的方法。異常處理使用 try、catch 和 finally 關鍵字來嘗試可能未成功的操作,處理失敗,以及在事後清理資源。異常可以由公共語言運行庫 (CLR)、第三方庫或使用 throw 關鍵字的應用程序代碼生成。
技術點
l try…catch…finally:異常處理
l throw:顯式拋出異常
l 自定義異常類:繼承自Exception的類
注意點:
l 異常也是類,異常對象跟普通對象沒有本質區別,只是專用來提示程序不正常
l finally塊中的代碼無論如何都會執行,不管是否發生了異常
catch可以捕獲具體的異常,也可以不明確指出具體的異常。如果標識出要捕獲的具體異常,則catch子句中列舉的異常要從小往大羅列。