第十二章 使用繼承

2022-04-07 09:02:42 字數 1637 閱讀 8205

繼承反映了類與類關係

為了宣告乙個類從另乙個類繼承,需要使用以下語法:

class derivedclass : baseclass

derivedclass (派生類)將從baseclass(基類)繼承,基類中的方法會成為派生類的一部分。在c#中,乙個類最多允許從乙個其他的派生類;不允許從兩個或者更多的派生類。然而,除非derivedclass 宣告為sealed(也就是宣告為「密封類」),否則可以使用相同的語法,從derivedclass 派生出更深一級的派生類。

繼承只適用於類,不適用於結構。不能定義由結構組成的繼承鏈,也不能從類或其他結構派生出乙個結構。

呼叫基類構造器

除了繼承得到的方法,派生類還自動包含來自基類的所有字段。

為派生類定義構造器時,可以使用base關鍵字呼叫基類構造器。

class mammal  //基類

public mammal()//基類構造器

class horse : mammal//horse是派生類

public horse (string name )

:base(name)     //呼叫mammal(name)

完全可以將一種型別的物件賦給繼承層次結構中較高位置的乙個類的變數。

宣告虛方法

故意設計成被重寫的方法稱為虛方法。

我們使用virtual關鍵字來標記虛方法。

namespace system

class object

public virtual string tostring()

宣告重寫方法

派生類用override關鍵字重寫基類的虛方法,從而提供該方法的另乙個實現。

理解擴充套件方法

擴充套件方法允許新增靜態方法來擴充套件現有的型別(無論是類還是結構)。引用被擴充套件型別的資料即可呼叫擴充套件方法。

擴充套件方法在靜態類中定義,被擴充套件的型別必須是方法的第乙個引數,而且必須附加this關鍵字。

using system;

namespace extensions

static class util

public static int converttobase(this int i, int basetoconvertto)

if (basetoconvertto < 2 || basetoconvertto > 10)

throw new argumentexception("value cannot be converted to base " + basetoconvertto.tostring());

int result = 0;

int iterations = 0;

doint nextdigit = i % basetoconvertto;

i /= basetoconvertto;

result += nextdigit * (int)math.pow(10, iterations);

iterations++;

while (i != 0);

return result;

呼叫int x = 591;

for (int i = 2; i <= 10; i++)

console.writeline(" in base  is ",x, i, x.converttobase(i));

第十二章 組合與繼承

1.組合 用已有類的物件作為新定義類的資料成員 2.繼承 在乙個已存在的類的基礎上,對他進行拓展,形成乙個新類 3.子類可以賦值給基類,基類不能賦值給子類 4.派生類函式同名隱藏 重定義基類函式 5.提供類的含參建構函式時,應加上乙個預設的建構函式 無參 以免對派生類物件初始化時沒有顯式呼叫基類建構...

第十二章 檔案

文字檔案 文字檔案是一種由若干字元構成的檔案,可以用文字編輯器進行閱讀或編輯。以txt py html等為字尾的檔案都是文字檔案。2.二進位制檔案 二進位制檔案一般是指不能用文字編輯器閱讀或編輯的檔案。以 mp4 png等為字尾的檔案都是二進位制檔案,如果想要開啟或修改這些檔案,必須通過特定軟體進行...

第十二章 dp

動態規劃策略 將原始問題拆分為多個子問題,將子問題結果記錄,方便復用子問題的解 遞迴 記憶化 遞推 是動態規劃的一體兩面,本質都是一樣的 遞推減少了呼叫次數,空間上還能優化,一般選擇遞推方式 遞迴 記憶化 int memo maxn 將o 2 n o n intfibonacci int n 遞推 ...