c 必會知識點

2022-08-31 02:39:11 字數 3643 閱讀 8759

關於記憶體的分配,首先應該了解分配在**的問題,clr管理記憶體的區域,主要有三塊:分別為:   1.執行緒的堆疊:用於分配值型別例項. 堆疊主要由作業系統管理,而不受垃圾**器(gc)的控制      當值型別例項所在方法結束時,其記憶體空間自動釋放,棧的執行效率高,但儲存容量有限   2.gc堆,用於分配小物件例項. 如果引用型別物件的例項大小小於85000位元組, 例項將被分配在gc堆上,      當有記憶體分配或者**時,垃圾收集器可能會對gc堆進行壓縮   3.loh(large object heap)堆,用於分配大物件例項.如果飲用型別物件的例項大小 不小於85000位元組時      該例項將被分配到loh堆上,而loh堆不會被壓縮,而且只在完全gc**時被**

關於例項建立有多個il指令解析:  1.newobj:用於建立引用型別物件  2.ldstr    :用於建立string型別物件  3.newarr:用於分配新的陣列物件  4.box     :在值型別轉換為引用型別物件時,將值型別字段拷貝到託管堆上發生的記憶體分配(裝箱 拆箱)

值型別 和引用型別的區別:  1.值型別通常被分配在棧上,除非它被建立在引用型別的內部(即類內部,跟隨物件儲存在堆上)    它的變數直接包含變數的例項,使用效率比較高,    使用完後,立即** 賦值時進行賦值沒建立乙個同值的新物件  2.應用型別分配在託管堆上,引用型別的變數通常包含乙個指向例項的指標,變數通過該指標來引用例項     使用完後,不是立即**,等待垃圾**器定時檢查堆中是否有沒被引用的物件,若有gc則對其進行**釋放資源     效率低,需要進行位址轉換, 賦值是只是對原有物件位址的引用  3.值型別是值copy, 引用型別是位址copy.

二.new 關鍵字用法:  1)  new 運算子 :用於建立物件和呼叫建構函式。  2)  new 修飾符 :用於向基類成員隱藏繼承成員。  3)  new 約束 :用於在泛型宣告中約束可能用作型別引數的引數的型別。 三.序列化與反序列化:  1.序列化: 序列化是將物件狀態轉換為可保持或傳輸的格式的過程。     2.與序列化相對的是反序列化,它將流轉換為物件。這兩個過程結合起來,可以輕鬆地儲存和  傳輸資料。

四.可訪問性級別有哪幾種:  1)  public 訪問不受限制。   2)  protected 在它的類中可訪問並且可由派生類訪問。。   3)  internal 只有在同一程式集的檔案中,內部型別或成員才是可訪問的。  4)  protected internal 同乙個程式集中的所有類,以及所有程式集中的子類都可以訪問。   5)  private 私有成員只有在宣告它們的類和結構體中才是可訪問的。

五. class和struct的異同:  相同點:  1)  語法類似。  不同點:  1)  class是引用型別,繼承自system.object類;       struct是值型別,繼承自system.valuetype類,因此不具多型性。但是注意,system.valuetype是個引用型別。  2)  從職能觀點來看,class表現為行為; 而struct常用於儲存資料。  3)  class支援繼承,可以繼承自類和介面; 而struct沒有繼承性,       struct不能從class繼承,也不能作為class的基類,但struct支援介面繼承。  4)  例項化時,class要使用new關鍵字; 而struct可以不使用new關鍵字       struct在宣告時就進行了初始化過程,所有的成員變數均預設為0或null。  5)  類用class修飾符,結構使用struct修飾符宣告建立

六.如何選擇結構還是類   1)  堆疊的空間有限,對於大量的邏輯的物件,建立類要比建立結構好一些。  2)  結構表示如點、矩形和顏色這樣的輕量物件。例如,如果宣告乙個含有 1000 個點物件       的陣列,則將為引用每個物件分配附加的記憶體。在此情況下,結構的成本較低。   3)  在表現抽象和多級別的物件層次時,類是最好的選擇。  4)  大多數情況下該型別只是一些資料時,結構時最佳的選擇。

七.抽象類 與 介面 的區別: 抽象類  1)  抽象方法只作宣告,而不包含實現,可以看成是沒有實現體的虛方法。  2)  抽象類不能被例項化。  3)  抽象類可以但不是必須有抽象屬性和抽象方法,但是一旦有了抽象方法,就一定要把這       個類宣告為抽象類。  4)  具體派生類必須覆蓋基類的抽象方法。  5)  抽象派生類可以覆蓋基類的抽象方法,也可以不覆蓋。如果不覆蓋,則其具體派生類必  須覆蓋它們。

介面  1)  介面不能被例項化。  2)  介面只能包含方法宣告。  3)  介面的成員包括方法、屬性、索引器、事件。  4)  介面中不能包含常量、字段(域)、建構函式、析構函式、靜態成員。  5)  介面中的所有成員預設為public,因此介面中不能有private修飾符。  6)  派生類必須實現介面的所有成員。  7)  乙個類可以直接實現多個介面,介面之間用逗號隔開。  8)  乙個介面可以有多個父介面,實現該介面的類必須實現所有父介面中的所有成員。

抽象類和介面的異同:  相同點:   1)  都可以被繼承。   2)  都不能被例項化。   3)  都可以包含方法宣告。   4)  派生類必須實現未實現的方法。  區 別:   1)  抽象基類可以定義字段、屬性、方法實現。介面只能定義屬性、索引器、事件、和方法   宣告,不能包含字段。   2)  抽象類是乙個不完整的類,需要進一步細化,而介面是乙個行為規範。微軟的自定義接   口總是後帶able欄位,證明其是表述一類「我能做。。。」。   3)  介面可以被多重實現,抽象類只能被單一繼承。   4)  抽象類更多的是定義在一系列緊密相關的類間,而介面大多數是關係疏鬆但都實現某一   功能的類中。   5)  抽象類是從一系列相關物件中抽象出來的概念, 因此反映的是事物的內部共性;介面   是為了滿足外部呼叫而定義的乙個功能約定, 因此反映的是事物的外部特性。   6)  介面基本上不具備繼承的任何具體特點,它僅僅承諾了能夠呼叫的方法。      7)  介面可以用於支援**,而繼承並不具備這個特點。   8)  抽象類實現的具體方法預設為虛的,但實現介面的類中的介面方法卻預設為非虛的,當   然您也可以宣告為虛的。   9)  如果抽象類實現介面,則可以把介面中方法對映到抽象類中作為抽象方法而不必實現,   而在抽象類的子類中實現介面中方法。

clr:公共語言執行庫  是乙個執行時環境,它負責資源管理(記憶體分配和垃圾**),  並保證應用和底層作業系統之間必要的分離

cts:(common type system)通用系統型別  所有.net語言共享這一型別系統,實現他們之間無縫的互操作  該方案還提供了語言之間的繼承性 cls:(common language specification)公共語言規範  可以保證c#元件與其他語言元件間的互操作性 託管** :  使用基於公共語言執行庫clr的語言編譯器開發的**稱為 託管**  託管**的優點:   跨語言繼承,跨語言異常處理,增強的安全性,版本控制盒部署支援,   簡化的元件互動模型,除錯和分析服務

(重點)委託:  1.委託可以看做 方法的集合,裡面儲存了方法的指標.但是它是型別安全的  2.委託是一種引用方法的型別  3.委託允許將方法作為引數進行傳遞  4.委託可用於定義**方法.

在.net中,配件的意思:  程式集(中間語言msil, 元資料, 資源, 裝配清單)

物件導向的基本原則之一--->實現低耦合 高內聚 多聚合 少繼承  類與類之間的關係,通常以耦合度來描述,即表示類與類之間的依賴關係程度.  沒有耦合關係的系統是根本不存在的,因為類與類,模組與模組,系統與系統之間或多或少  要發生相互互動,設計應力求將類與類之間的耦合關係降到最低.

可空型別資料:  private bool? gender---可以用來包裝乙個值型別,編譯成中間**時就是:nullable_pgender;  本質就是乙個新的類(所以可以為null,只不過在其中包含了乙個bool變數)  

Redis必會知識點總結

redis是完全開源的,遵守bsd協議,是乙個高效能的key value資料庫。redis與其他key value快取產品有以下三個特點 redis支援的資料型別?什麼是redis持久化?redis有哪幾種持久化方式?優缺點是什麼?redis有哪些架構模式?講講各自的特點 使用過redis分布式鎖嗎...

MySQL必知必會知識點1

mysql 使用到預設埠是 3306 mysql 在執行匹配時預設不區分大小寫。選擇資料庫 usedatabasename 了解資料庫 show databases 了解資料庫中的表 show tables 從表中選擇特定的列 selectcolumnname from tablename 從表中選...

Vue必會知識點 原理篇

響應式的原理 偵測資料的變化,收集檢視依賴了哪些資料,資料變化時,自動 通知 需要更新的檢視部分,並進行更新。三個步驟對應的專業術語就是 資料劫持 資料 依賴收集,發布訂閱模式。網上的vue響應式詳解 資料劫持的核心api object.defineproperty vue3改用的proxy obj...