1.函數重載:函數名一樣,參數不一樣(類型.個數),與傳回型別無關
2.使用StringBuilder可以執行字串的操作,String可以用於儲存字串或顯示最終結果
3.foreach遍曆是唯讀,不能改變數組及集合中的元素值
4.封裝:類的成員,類的構造器,修飾符,靜態
5.c#中資料成員:欄位、常量、事件;非資料成員:索引器、運算子、建構函式、解構函式、屬性
6.如果提供了帶參數的建構函式,編譯器就不會自動提供預設的建構函式,只有在沒有定義任何建構函式時,編譯器才會自動提供預設的建構函式
7.建構函式也可以定義為private或protected,這樣不相關的類就不能訪問他們
8.建構函式不使用public修飾情況
1).類僅用作某些靜態成員或屬性的容器,因此永遠不會執行個體化
2).希望類僅通過調用某個靜態成員函數來執行個體化(這就是所謂對象執行個體化的類代理方法)
9.編寫靜態建構函式的一個原因是,類有一些靜態欄位或屬性,需要在第一次使用類之前,從外部源中初始化這些靜態欄位和屬性
10..NET運行庫沒有確保靜態建構函式什麼時候執行,所以不要把要求在某個特定時刻(例如,載入程式及時)執行的代碼放在靜態建構函式中。在c#中,靜態建構函式通常在第一次調用類的成員之前執行。
11.靜態建構函式沒有存取修飾詞,其他c#代碼從來不調用它,但在載入類型時,總是由.NET運行庫調用它;靜態建構函式只能訪問類的靜態成員
12.如果不在自己定義的類中重寫ToString(),該類將只繼承System.Object執行方式--顯示類的名稱
13.結構並不支援實現繼承,但支援介面繼承。
1).結構總是派生於System.ValueType,它們還可以派生於任意多個介面
2).類總是派生於使用者選擇的另一個類,它們還可以派生於任意多個介面
14.在方法上使用sealed關鍵字是沒有意義的,除非該方法本身是某個基類上另一個方法的重寫形式。如果定義一個新方法,但不想讓別人重寫它,首先就不要把它聲明為virtual。
15.不能把類型定義為protected、private、protected internal,因為這些修飾符對於包含在命名空間中的類型來說是沒有意義的。因此這些修飾符只能應用於成員。但是,可以用這些修飾符定義嵌套的類型,因為在這種情況下,類型也具有成員的狀態。
16.一般情況下,介面中只能包含方法、屬性、索引器和事件的聲明。介面不能有建構函式或欄位。在介面定義中還不允許聲明成員上的修飾符。
17.Array類是一個抽象類別,Clone()方法會建立一個新數組,而Copy()只是傳送了階數相同、有足夠元素空間的已有數組。都是淺拷貝
18.rear始終指向要入隊的元素。判斷隊空的條件:rear == front;判斷隊滿的條件:(rear + 1)%maxsize == front 少用一個空間; 求迴圈隊列中資料元素的個數:(rear - front + maxsize)%maxsize
19.可空類型修飾符使 C# 能夠建立表示未定義值的實值型別變數。可空類型可以表示基礎類型的所有值,另外還可以表示 null 值。
20.1).System.Nullable<T> variable;2).T? variable T 是可空類型的基礎類型。T 可以是包括 struct 在內的任何實值型別;但不能是參考型別。
21.可空類型隱式轉換為其他可空類型;非可空類型隱式轉換為可空類型;可空類型不能隱式轉換為非可空類型,此時必須進行顯式轉換。此時的可空類型不能為null
22.繼承。當子類構造時如果沒有標明base,則總是調用父類預設的無參建構函式,如果父類定義了有參的建構函式,此時必須顯示定義其無參的建構函式,要不然其子類無法構造,出現編譯時間錯誤。
23.子類可以隱式轉換成父類,父類不能轉換成子類(或者說有時會失敗)。子類重寫父類方法,那麼父類方法是虛方法或抽象方法或介面
24.方法覆蓋(隱藏)和方法重寫:傳回型別一樣;方法重載:與傳回型別無關
25.刪除與為委託增加方法一樣,其實是建立了一個新的委託。如果在調用列表中的方法有多個執行個體,-=運算子將從列表最後開始搜尋,並且移除第一個與方法匹配的執行個體。
26.如果委託有傳回值並且在調用列表中有一個以上的方法,則
1).調用列表中最後一個方法返回的值就是委託調用返回的值
2).調用列表中所有其他方法的傳回值都會被忽略
27.委託匿名方法省略參數列表,如delegate{},則要滿足:
1).委託的參數列表不包含任何out參數
2).匿名方法不使用任何參數
***.事件是對委託的封裝,以致外部不能直接使用
28.多態:多態性是允許你將父物件設定成為和一個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作
29.static void Call(Animal a){ a.run();a.eat()}//run()是虛的
Dog d = new Dog();
Call(d);
運行結果:"dog.run()","animal.eat()"
30.靜態成員在靜態記憶體中分配,棧記憶體中成員作用範圍--函數執行完畢銷亡。
31.靜態方法中不能存在非靜態成員原因:靜態方法一直存在,而非靜態成員只有執行個體化才能存在,當其未執行個體化時賦值、調用就會出錯。
32.抽象類別與一般的類一樣(建構函式、欄位等成員,但沒有抽象欄位),但不能執行個體化。抽象方法在子類中要重寫(跟介面類似,但介面方法不能顯示定義存取修飾詞)
33.介面成員:方法、屬性、索引器、事件,不能有欄位。且成員不能實現
34.c#提供了5種泛型:類、結構、介面、委託、方法(只有方法是成員,其他是類型);共有5中類型的約束:類名、class(參考型別)、 strcut(實值型別)、Interfacename(介面泛稱)、new()
35.where子句可以多個,以任何次序列出。但where子句中的約束必須有特定的順序:
1).最多隻能有一個主約束,如果有則必須放在第一位
2).可以有任意多的Interfacename約束
3).如果存在建構函式約束,則必須放在最後
36.作業系統會調度線程。線程有一個優先順序、正在處理的程式的位置計數器、一個儲存其本地變數的堆棧。每個線程都有自己的堆棧,但程式碼的記憶體和堆由一個進程的所有線程共用
37.非同步方法呼叫調用的標準模式
1).等待直到完成
2).輪詢
3).回調
38.EndInvoke()方法會一直等待,直到委託完成其任務為止。如果不等待委託完成其任務就結束主線程,委託線程就會停止。
39.在預設情況下,用Thread類建立的線程是前台線程。線程池中的線程總是後台線程。
40.winform生命週期
1).建構函式
2).Load事件
3).Shown事件
4).Actiovated事件
5).Deactived事件
6).Closing事件
7).Closed事件
8).解構函式