c#與設計模式,都是新接觸的東西,有很多小的知識點需要理解、記住。下面自己總結一下讓印象更深刻!
相同的地方:
1. ref和out都是傳位址的,所以都會改變實參的值。
2.方法定義和呼叫方法均必須顯式使用 ref/out關鍵字。
不同的地方:
1. out方法需要必須對形參進行初始化或者賦值,否則編譯出錯。
2. out傳完之後就把形參清空了,所以在進入方法的時候不能使 用形參;而ref可以使用,因為已經初始化過。
3. ref的實參必須初始化,out的實參可初始化可不初始化,反正 進去後都會清掉。
過載:乙個類中的方法名相同,引數的個數,型別不同(多型性)
重寫:當乙個子類繼承一父類,而子類中的方法與父類中的方法的名稱,引數個數、型別都完全一致時,就稱子類中的這個方法重寫了父類中的方法。(繼承)
①堆通常是乙個可以被看做一棵樹的陣列物件。
②堆是在程式執行時,而不是在程式編譯時,申請某個大小的記憶體空間。即動態分配記憶體,對其訪問和對一般記憶體的訪問沒有區別。
③堆是應用程式在執行的時候請求作業系統分配給自己記憶體,一般是申請/給予的過程。
④堆是指程式執行時申請的動態記憶體,而棧只是指一種使用堆的方法(即先進後出)。
①棧又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。
②棧就像乙個桶,後放進去的先拿出來,它下面本來有的東西要等它出來之後才能出來(先進後出)
③棧是作業系統在建立某個程序時或者執行緒為這個執行緒建立的儲存區域。
①佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端進行刪除操作,而在表的後端進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。
②佇列中沒有元素時,稱為空佇列。
③建立順序佇列結構必須為其靜態分配或動態申請一片連續的儲存空間,並設定兩個指標進行管理。乙個是隊頭指標,它指向隊頭元素;另乙個是隊尾指標,它指向下乙個入隊元素的儲存位置。
④佇列採用的fifo(先進先出),新元素總是被插入到鍊錶的尾部,而讀取的時候總是從鍊錶的頭部開始讀取。每次讀取乙個元素,釋放乙個元素。
裝箱在值型別向引用型別轉換時發生
拆箱在引用型別向值型別轉換時發生
值型別的變數直接儲存資料,而引用型別的變數持有的是資料的引用。
值型別有:
byte,short,int,long,float,double,decimal,char,bool struct ,結構體(struct),列舉(enum)
引用型別有:
陣列, 類(class), 介面,委託,字串(string)
相同點:
引用型別可以實現介面,值型別當中的結構體也可以實現介面;
引用型別和值型別都繼承自system.object類。
1.範圍方面
值型別包括:結構體(數值型別、bool型、使用者定義的結構體),列舉,可空型別。
引用型別包括:陣列,使用者定義的類、介面、委託,object,字串(string),使用者定義的結構體,可空型別
2.記憶體分配方面:
陣列的元素不管是引用型別還是值型別,都儲存在託管堆上。
引用型別在棧中儲存乙個引用,其實際的儲存位置位於託管堆。簡稱引用型別部署在託管推上。而值型別總是分配在它宣告的地方:作為欄位時,跟隨其所屬的變數儲存;作為區域性變數時,儲存在棧上。
3.適用場合:
值型別在記憶體管理方面具有更好的效率,並且不支援多型,適合用做儲存資料的載體;引用型別支援多型,適合用於定義應用程式的行為。
引用型別可以派生出新的型別,而值型別不能,因為所有的值型別都是密封的;
引用型別可以包含null值,值型別不能;
引用型別變數的賦值只複製對物件的引用,而不複製物件本身。而將乙個值型別變數賦給另乙個值型別變數時,將複製包含的值。
public:公有的,是型別和型別成員的訪問修飾符。對其訪問沒有限制。
internal:內部的,是型別和型別成員的訪問修飾符。同乙個程式集中的所有類都可以訪問
private:私有的,是乙個成員訪問修飾符。只有在宣告它們的類和結構中才可以訪問。
protected: 受保護的,是乙個成員訪問修飾符。只能在它的類和它的派生類中訪問。
partial:在整個同一程式集中定義分部類和結構。
static: 宣告屬於型別本身而不是屬於特定物件的成員。
abstract:抽象類,只能是其他類的基類。類中的方法只宣告不實現,方法的實現在他的派生類中完成。
sealed:指定類不能被繼承。
virtual:用於修飾方法、屬性、索引器或事件宣告,並且允許在派生類中重寫這些物件
override:提供從基類繼承的成員的新實現
new:作修飾符,隱藏從基類成員繼承的成員,在不使用 new 修飾符的情況下隱藏成員是允許的,但會生成警告。作運算子,用於建立物件和呼叫建構函式。
extern:用於宣告在外部實現的方法。 extern 修飾符的常見用法是在使用 interop 服務調入非託管**時與 dllimport 特性一起使用。 在這種情況下,還必須將方法宣告為 static
屬性是乙個方法或一對方法。有set(修改,寫)和get(訪問,讀)兩種方法。體現了封裝性
語法:變數要定義為私有變數
private
《返回型別(要與被訪問變數的型別相同)> 《屬性名(與被訪問變數同名)>
public
《返回型別(要與被訪問變數的型別相同)> 《屬性名(不能與被訪問變數同名)> /將屬性名第乙個字母大寫
set}
類是具有相同屬性和功能的物件集合。(class關鍵字)
class
cat
例項是乙個真實的物件。(new關鍵字)
cat cat;//宣告乙個cat物件
cat=new cat();//將cat物件例項化
這兩個可以合在一起寫成:
cat cat=new cat();//cat()是構造方法(也叫建構函式),是對類進行初始化,與類同名但沒有返回值,在new的時候呼叫。
在使用方法重寫的時候,為了讓子類可以完全的重寫父類中的成員,父類在定義這些成員的時候,一定要使用virtual關鍵字,讓可以重寫的方法成為虛方法,讓可以重寫的屬性成為虛屬性。
子類在重寫這個方法或屬性的時候,將virtual替換成override關鍵字,代表已將父類的成員替換為了它自己的成員並實現。
如果想在子類的方法中再用父類的那個被覆蓋的方法時,只需要使用base關鍵字就可以代表繼承的父類了
void關鍵字在c#中代表沒有型別。如果作為函式的返回值型別,即代表函式沒有返回值。如果用來定義指標,代表定義了乙個無型別指標。
用來宣告乙個介面,介面名前要加大寫字母i,介面的方法或屬性前面不能有修飾符,方法沒有方法體
C 設計模式 總結
主要設計模式包括 簡單工廠模式 工廠方法模式 抽象工廠模式 建造者模式 原型模式 單例模式 介面卡模式 橋接模式 組合模式 裝飾模式 外觀模式 享元模式 模式 職責鏈模式 命令模式 直譯器模式 迭代器模式 中介者模式 備忘錄模式 觀察者模式 狀態模式 策略模式 模板方法模式 訪問者模式 1.簡單工廠...
C 設計模式總結
c 設計模式 1 單例模式 c 設計模式 2 簡單工廠模式 c 設計模式 3 工廠方法模式 c 設計模式 4 抽象工廠模式 c 設計模式 5 建造者模式 builder pattern c 設計模式 6 原型模式 prototype pattern c 設計模式 7 介面卡模式 adapter pa...
設計模式知識點總結
什麼是設計模式?答 christopher alexander說過 每乙個模式描述了乙個在我們周圍不斷重 生的問題,以及該問題解決方案的核心。這樣,你就能一次又一次地使用該方案而不必做重複勞動。簡單來講,設計模式就是經驗的總結。設計模式的分類 23種 答 建立型模式 5種 單例模式 抽象工廠模式 工...