基礎類別(base class)和衍生類別(derived class)
這一部分是說到 c# 有關類別繼承方面的東西,和 java 不同的地方,是 c# 對於類別的稱呼,在 java 中是稱為父類別(superclass)和子類別( subclass) 在 c# 中是採用 c++ 的術語以基礎類別(base class)和衍生類別(derived class)來稱呼。
存取修飾字方面,和 java 一樣有 protected 修飾字,衍生類別的建構子中,想要呼叫基礎類別的建構字,是採用下列語法:
class Shape {
public Shape(int n) {
}
}
class Triangle : Shape {
public Triangle (int n, string name) : base(int n) {
}
}
base 也可以用來存取基礎類別中被遮蔽(hide)的變數,使用 base.member 的型式,其中 member 可以是 method 或是 instance veriable 。
在有繼承關係時,產生衍生類別實體,其呼叫建構子的順序和 java 的一樣,都是會先呼叫基礎類別的建構子,再呼叫衍生類別本身的建構子。
抽像類別前要加 abstract 關鍵字
不可再繼承的類別使用 sealed 關鍵字,效果等同 java 在類別宣告前加上 final
object 是所有類別和型別(包和數值型別)的基礎型別,數值型別可以透過 裝箱(boxing) 轉成 object 可以接受的型別。
c# 同樣具有 interface, 在 interface 中所宣告的 method,一定是 public method, 實作 interface 的時候,可以透過 void interfaceName.method() 的方式,直接指定所要實作的是哪一個 interface method 來產生 private 級別的實作,只能讓實作類別內部使用的 method。
在 interface 中,所有的 method 都是 public 級別,並且不允許使用任何修飾字(包含 public)。
可以宣告 interface 的參考變數,再讓 interface 參考變數指向實作類別的 instance, 可以達到多型的效果,而且不用使用到 virtual 和 override 關鈹字。