在.net 中類(class) 與結構(Struct)的異同。 Class 可以被實例化,屬於引用類型,是分配在記憶體的堆上的。類是引用傳遞的。 Struct 屬於值類型,是分配在記憶體的棧上的。結構體是複製傳遞的。 Boolean等屬於結構體。 堆和棧的區別 棧是編譯期間就分配好的記憶體空間,因此你的代 ...
- 在.net 中類(class) 與結構(Struct)的異同。
Class 可以被實例化,屬於引用類型,是分配在記憶體的堆上的。類是引用傳遞的。
Struct 屬於值類型,是分配在記憶體的棧上的。結構體是複製傳遞的。
Boolean等屬於結構體。
- 堆和棧的區別
棧是編譯期間就分配好的記憶體空間,因此你的代碼中必須就棧的大小有明確的定義;局部值類型變數、值類型參數等都在棧記憶體 中。
堆是程式運行期間動態分配的記憶體空間,你可以根據程式的運行情況確定要分配的堆記憶體大小。
- GC是什麼?為什麼要有GC?
GC是垃圾收集器(Garbage Collection) 程式員不用擔心記憶體管理,因為垃圾收集器會自動進行管理。GC只能處理托管記憶體資源的 釋放,對於非托管資源 則不能使用GC進行回收,必須由程式員手動回收,一個例子就是FileStream 或者SqlConnection 需要程式 員調用Dispose進行資源的回收。
- 值類型和引用類型的區別?
- 將一個值類型變數賦值給另一個值類型變數時,將複製包含的值。引用類型變數的賦值只複製對對象的引用,而不複製對象本身。
- 值類型不可能派生出新的類型:所有的值類型均隱式派生自System.ValueType。但與引用類型相同的是,結構也可以實現介面。
- 值類型不可能包含null值;然而,可空類型功能允許將null 賦給值類型。
- 每種值類型均有一個隱式的預設構造函數來初始化該類型的預設值。
- C# 中的介面和類有什麼異同。
不同點: 不能直接實例化介面。 介面不包含方法的實現。 介面可以多繼承,類只能單繼承。 類定義可在不同的源文件之間進行拆分。
相同點: 介面、類和結構體都可以從多個介面繼承。介面類似於抽象基類:繼承介面的任何非抽象類型都必須實現介面所有成員。
介面和類都可以包含事件、索引器、方法和屬性。
- abstract class 和interface 有什麼區別?
相同點:都不能被直接實例化,都可以通過繼承實現其抽象的方法。
不同點: 介面支持多繼承;抽象類不能實現多繼承。介面只能定義行為;抽象類既可以定義行為,還可以提供實現。
介面只包含方法(Method) 、屬性(Property)、索引器(Index) 、事件(Event)的簽名定義欄位和包含實現方法。
介面可以作用於值類型(Struct)和引用類型(Class);抽象類只能作用於引用類型。例如,Struct就可以繼承介面,而不能繼承類。
加分的補充回答:講設計模式的時候SettingsProvider的例子。