一.基礎知識
類:
封裝的好處:良好的封裝能夠減少耦合;類內部的實現可以自由地修改;類具有清晰的對外介面。
類是C#中的一種結構,用於在程式中類比現實生活的對象;
成員變數表示對象的特徵;
方法表示對象可執行檔操作;
如果類中未定義建構函式,則由運行庫提供預設建構函式;
解構函式不能重載,並且每個類只能有一個解構函式;
可以根據不同數量的參數或不同資料類型參數對方法進行重載,不能根據返回值進行方法重載;
命名空間用來界定類所屬的範圍,類似於Java中的包。
特徵:
繼承是獲得現有類的功能的過程;
建立新類所根據的基礎類稱為基類或父類,建立的類則稱為衍生類別或子類;
base關鍵字用於從衍生類別中訪問基類成員;
override關鍵字用於修改方法、屬性或索引器。new存取修飾詞用於顯式隱藏繼承自基類的成員;
抽象類別是指至少一個抽象成員(尚未實現的方法)的類,抽象類別不能實現;
重寫方法就是修改基類中方法的實現,virtual關鍵字用於 修改方法的聲明;
顯示介面實現是用於在名稱不明確的情況下確定成員函數實現的事哪一個介面。
進階:
錯誤和異常
C#使用一種技術,即異常處理,為處理錯誤情況提供了一種機制,這就為每種錯誤情況提供了定製的處理方式,也把標識錯誤的代碼與處理錯的代碼分離開來;
資料類型轉換
如何隱式或顯式地轉換資料類型;
預先處理
在編譯代碼時,第一部進行預先處理,這樣就可以在代碼上進行文本替換了,也可以產生不同的程式,以滿足不同情況的需要;
不安全的程式碼
C#通常會陷藏記憶體訪問的細節,簡化代碼的處理,但有一些情況需要直接存取記憶體。C#允許把標記的代碼聲明為不安全的代碼,直接存取記憶體。
名詞解釋:
運算子多載
可以對類的執行個體進行加、減、乘、除等操作;
索引符
它允許在文法上按照數組來處理,並簡化包含許多個物件的類的使用;
委託
C#允許代碼引用一個方法,而這樣無需指定引用什麼方法,可以在運行時再指定,委託就是這樣一種方式,類似於C++中函數指標,但是它們是型別安全的和物件導向的;
事件
在編程時,通常需要告訴一些代碼什麼進修執行某個操作,例如使用者什麼時候單擊了滑鼠按鍵。C#使用事件為這種場合提供;額內建支援。
this關鍵字
this 是一個保留字,僅限於建構函式和方法成員中使用
在類的建構函式中出現表示對正在構造的對象本身的引用,在類的方法中出現表示對調用該方法的對象的引用,在結構的構造上函數中出現表示對正在構造的結構的引用,在結構的方法中出現表示對調用該方法的結果的引用
this 保留字不能用於靜態成員的實現裡,因為這時對象或結構並未執行個體化
在 C# 系統中,this 實際上是一個常量,所以不能使用this++ 這樣的運算
this 保留字一般用於限定同名的隱藏成員、將對象本身做為參數、聲明索引訪問器、判斷傳入參數的對象是否為本身
二.學習曆程
在學習C#的過程中,可謂是:很心酸!感覺雖說是學習過相關的知識語言,可依然感覺好難懂。先畫出一幅圖,描述一下曆程吧。
在學習的時候仍感覺這個語言有點兒很不同,自己能力還不及,還需努力呀!
三.對比成長
1.類和結構的區別?
類:
類是參考型別在堆上分配,類的執行個體進行賦值只是複製了引用,都指向同一段實際對象分配的記憶體
類有構造和解構函式
類可以繼承和被繼承
結構:
結構是值類型在棧上分配(雖然棧的訪問速度比較堆要快,但棧的資源有限放),結構的賦值將分配產生一個新的對象。
結構沒有建構函式,但可以添加。結構沒有解構函式
結構不可以繼承自另一個結構或被繼承,但和類一樣可以繼承自介面
2.介面的多繼承會帶來哪些問題?
C# 中的介面與類不同,可以使用多繼承,即一個子介面可以有多個父介面。但如果兩個父成員具有同名的成員,就產生了二義性(這也正是C# 中類取消了多繼承的原因之一),這時在實現時最好使用顯式的聲明
3.抽象類別和介面的區別?
抽象類別(abstract class)可以包含功能定義和實現,介面(interface)只能包含功能定義
抽象類別是從一系列相關對象中抽象出來的概念,因此反映的是事物的內部共性;介面是為了滿足外部調用而定義的一個功能約定,因此反映的是事物的外部特性
分析對象,提煉內部共性形成抽象類別,用以表示對象本質,即“是什麼”
為外部提供調用或功能需要擴充時優先使用介面
4.什麼是反射?
反射,Reflection,通過它我們可以在運行時獲得各種資訊,如程式集、模組、類型、欄位、屬性、方法和事件
通過對類型動態執行個體化後,還可以對其執行操作
簡單來說就是用string可以在runtime為所欲為的東西,實際上就是一個.netframework內建的萬能工廠
一般用於外掛程式式架構程式和設計模式的實現,當然反射是一種手段可以充分發揮其能量來完成你想做的任何事情(前面好象見過一位高人用反射調用一個官方類庫中未說明的函數。)
5.什麼是委託、委託鏈?
委託(delegate)是一種參考型別,我們在處理他的時候要當作類來看待而不是方法,說白了委託就是對方法或者方法列表的引用,調用一個委託執行個體就好像是調用c++中的指標一樣,他封裝了對制定方法的引用,或者說委託起到的是橋樑的作用,執行個體後的委派物件會將給定的參數傳遞給他所回調的方法,並去執行方法。
委託鏈我們知道委託是對方法的封裝,而且委託可以封裝很多方法形成委託鏈,其實委託就好像是一個容器,他封裝了我們想要實現的若干方法,當調用委派物件(相當於c++中的指標)時,就會順序的執行它所封裝的所有的方法,如果有返回值的話,往往返回的是最後一個被執行的方法的返回值,委託鏈的形成可以用"+="或"-="對不同的委託執行個體進行二元操作。