Class 能夠被實例化,屬於引用類型,是分配在內存的堆上的。類是引用傳遞的。程序員
Struct 屬於值類型,是分配在內存的棧上的。結構體是複製傳遞的。設計模式
Boolean等屬於結構體。ide
棧是編譯期間就分配好的內存空間,所以你的代碼中必須就棧的大小有明確的定義;局部值類型變量、值類型參數等都在棧內存 中。函數
堆是程序運行期間動態分配的內存空間,你能夠根據程序的運行狀況肯定要分配的堆內存大小。spa
GC是垃圾收集器(Garbage Collection) 程序員不用擔憂內存管理,由於垃圾收集器會自動進行管理。GC只能處理託管內存資源的 釋放,對於非託管資源 則不能使用GC進行回收,必須由程序員手動回收,一個例子就是FileStream 或者SqlConnection 須要程序 員調用Dispose進行資源的回收。.net
不一樣點: 不能直接實例化接口。 接口不包含方法的實現。 接口能夠多繼承,類只能單繼承。 類定義可在不一樣的源文件之間進行拆分。設計
相同點: 接口、類和結構體均可以從多個接口繼承。接口相似於抽象基類:繼承接口的任何非抽象類型都必須實現接口全部成員。對象
接口和類均可以包含事件、索引器、方法和屬性。繼承
相同點:都不能被直接實例化,均可以經過繼承實現其抽象的方法。索引
不一樣點: 接口支持多繼承;抽象類不能實現多繼承。接口只能定義行爲;抽象類既能夠定義行爲,還能夠提供實現。
接口只包含方法(Method) 、屬性(Property)、索引器(Index) 、事件(Event)的簽名定義字段和包含實現方法。
接口能夠做用於值類型(Struct)和引用類型(Class);抽象類只能做用於引用類型。例如,Struct就能夠繼承接口,而不能繼承類。
加分的補充回答:講設計模式的時候SettingsProvider的例子。