類和結構的區別 |
- 類當中默認的有一個無參數的構造函數
- 當在類中寫一個有參數的構造函數,默認無參數的構造函數被幹掉了
- 類中寫構造函數參數列表中參數個數可以不確定
結構
-
在結構中默認的也有一個無參數的構造函數
-
當在結構中寫一個有參數的構造函數,默認的無參數的構造函數還有,沒被幹掉
-
在結構中寫構造函數,要把所有的字段都要完全賦值
類是引用類型,結構是值類型
值類型和應用類型的區別 |
1.將一個值類型變量賦給另一個值類型變量時,將賦值包含的值。引用類型變量的賦值只賦值對對象的引用,而不賦值對象本身
2.值類型不可能派生出新的類型:所有的值類型均隱式派生自System.ValueType。但與引用類型相同的是,結構也可以實現接口
3.值類型不可能包含Null值
4.每種值類型均有一個隱式的默認構造函數來初始化該類型的默認值。
接口和類有什麼異同 |
- 不能直接實例化接口
- 接口不包含方法的實現
- 接口可以多繼承,類只能單繼承
- 類定義可在不同的源文件之間進行拆分
相同點:
- 接口、類和結構都可以從多個接口繼承
- 接口類似於抽象基類:繼承接口的任何非抽象類型都必須實現接口的所有成員
- 接口和類都可以包含事件、索引器、方法和屬性
C# 支持多重繼承嗎?
類之間不支持,接口之間支持。類對接口叫做實現,不叫繼承,類是爹、接口時能力。能擁有多個能力,但不能有多個爹
抽象類和接口有什麼區別 |
相同點:都不能被直接實例化,都可以通過繼承實現抽象方法
不同點:
- 接口支持多繼承;抽象類不能實現多繼承
- 接口只能定義行爲;抽象類既可以定義行爲,還可能提供實現
- 接口可以用於支持回調;抽象類不能實現回調,因爲繼承不支持
- 接口只包含方法、屬性、索引器、事件的簽名,但不能定義字段和包含實現的方法;抽象類可以定義字段、屬性、包含有實現的方法
- 接口可以作用於值類型和引用類型;抽象類只能作用於引用類型。