C 學習筆記

2021-10-23 07:24:54 字數 1910 閱讀 3787

1.值型別,引用型別區別,裝箱和拆箱

值型別是直接儲存乙個數值,而引用型別是儲存對值的引用,這兩種型別分別儲存在不用的記憶體區域。而從記憶體上看,值型別是在棧中的操作,而引用型別是在堆中的操作。值型別是具體的那個數值所占用的空間大小,而引用型別是存放那個數值的空間位址。(在c#中,結構體是值型別,類是引用型別)

值型別(value type):byte,short,int,long,float,double,decimal,char,bool 和 struct 統稱為值型別。值型別變數宣告後,不管是否已經賦值,編譯器為其分配記憶體。

引用型別(reference type):string 和 class統稱為引用型別。當宣告乙個類時,只在棧中分配一小片記憶體用於容納乙個位址,而此時並沒有為其分配堆上的記憶體空間。當使用 new 建立乙個類的例項時,分配堆上的空間,並把堆上空間的位址儲存到棧上分配的小片空間中。

引用型別與值型別相同的是,結構體也可以實現介面;

引用型別可以派生出新的型別,而值型別不能;

引用型別可以包含null值,值型別不能(可空型別功能允許將 null 賦給值型別);

引用型別變數的賦值只複製對物件的引用,而不複製物件本身。而將乙個值型別變數賦給另乙個值型別變數時,將複製包含的值。

裝箱 就是把「值型別」轉換成「引用型別」(object);

拆箱 就是把「引用型別」轉換成「值型別」;

2.介面和繼承

介面是方法的抽象,如果不同的類有同樣的方法,那麼就應該考慮使用介面。

c#中介面可以多繼承,介面之間可以相互繼承和多繼承。乙個類可以同時繼承乙個類和多個介面,但是介面不能繼承類。

3.string和stringbuilder的異同

相同點在於string和stringbuilder表示的都是連續序列的字串,只是他們的內部實現方式有所不同。

不同點在於string是不可變型別,string值的每一次改變都是在建立新的物件。

4.sealed,const 和onlyread的區別; ""與null的區別

static:是靜態的,修飾的類,叫靜態類,修飾的成員,叫靜態成員

const:常量,不可變,資源共享;該字段不可以被修改,可以通過類名訪問

基本資料型別,string,引用型別的變數的值只能是null。

readonly:唯讀,表示該欄位初始化後不能被修改;主要是用於修飾字段,表示該字段是唯讀,該欄位只能在建立的時候初始化或者建構函式中初始化;

區別:const常量在編譯時賦值,所以一旦賦值將不能改變,也不能用變數給const常量賦值。

readonly是唯讀型別,而不是常量,其在執行時賦值,所以可以使用用型別給其賦值,還可以在建構函式內賦值,從而達到執行不的建構函式,readonly資料的值也不同。

sealed:密封的,修飾類:該類不能被繼承

修飾方法,屬性:防止被再次重寫

這個sealed只能修飾重寫的成員,即修飾方法時,要配合override一起使用,單獨使用不能修飾方法。

null 沒有建立記憶體空間,str中存放的是空引用指標;

" " 建立了記憶體空間,str中存放的是指向堆中的指標。

7.物件導向三大特徵,五大原則

參考博文.

三大特徵:封裝,繼承,多型。

五大原則:(1)單一職責原則 srp ,乙個類應該有且只有乙個去改變它的理由,乙個類應該只有乙個工作。

(2)開放封閉原則 ocp,物件或實體應該對擴充套件開放,對修改封閉。

(3)黎克特制替換原則 lsp,在物件x為型別q(x)成立,那麼當s是t的子類時,物件y為型別s時q(y)也成立。(對父類的呼叫子類也適用)

(4)依賴倒轉原則 dip,高層次模組不應該依賴低層次模組,他們都應該依賴抽象。具體實現也依賴抽象,而不是抽象依賴現實。

(5)介面隔離原則 isp,不應該強迫客戶端實現乙個用不上的的介面,或是說客戶端不應該被迫依賴它們不使用的方法,使用多個專門的介面比使用單個介面要好得多。

C 學習筆記( )

一 語法 迴圈 foreach 型別識別符號 in 表示式 code 用法 例子int temp foreach int num in temp 每次從temp取乙個元素賦給num直至取完 console.writeline n num 每行顯示乙個元素 執行結果 c 中唯讀 只寫控制 class ...

C 學習筆記

1.函式特徵 有函式頭和函式體 接受乙個引數 返回乙個值 需要乙個原型。2.c 命名規則 在名稱中只能使用字母字元 數字和下劃線 名稱的第乙個字元不能是數字 區分大寫字母和小寫字母 不能將c 關鍵字用作名稱 以兩個下劃線或下劃線和大寫字母打頭的名稱被保留給實現 編譯器及其使用的資源 使用,以乙個下劃...

c 學習筆記

屬性 屬性開頭字母大寫 屬性可以判斷輸入的非法值 屬性本身不儲存值 依靠字段 索引器 using system using system.collections.generic using system.linq using system.text namespace b try catch exc...