C# 快速導覽 - 改寫父類別的方法

子類別 (subclass) 若是要定義與父類別 (superclass) 相同名稱的方法 (method) ,要加上 new 關鍵字 (keyword) ,表示這個方法被子類別改寫。



舉例如下
class Demo {
    public void DoSomething() {
        System.Console.WriteLine("There is no spoon.");
    }
}

class Demo2 : Demo {
    public new void DoSomething() {
        System.Console.WriteLine("Free your mind.");
    }
}

class DemoTest {
    static void Main() {
        Demo2 d = new Demo2();
        d.DoSomething();
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:class14.cs
    功能:示範 C# 程式 
    作者:張凱慶
    時間:西元 2013 年 6 月 */


Demo2 改寫了 DemoDoSomething()
public new void DoSomething() {
    System.Console.WriteLine("Free your mind.");
}


編譯執行,結果如下



如果子類別除了改寫外,還需要先執行父類別定義的部份,可用關鍵字 base 先呼叫父類別的方法,例如
class Demo {
    public void DoSomething() {
        System.Console.WriteLine("There is no spoon.");
    }
}

class Demo2 : Demo {
    public new void DoSomething() {
        base.DoSomething();
        System.Console.WriteLine("Free your mind.");
    }
}

class DemoTest {
    static void Main() {
        Demo2 d = new Demo2();
        d.DoSomething();
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:class15.cs
    功能:示範 C# 程式 
    作者:張凱慶
    時間:西元 2013 年 6 月 */


通常 base 會放在改寫方法的第 1 行
public new void DoSomething() {
    base.DoSomething();
    System.Console.WriteLine("Free your mind.");
}


編譯執行,結果如下



中英文術語對照
子類別subclass
父類別superclass
方法method
關鍵字keyword


您可以繼續參考
類別


相關目錄
回 C# 快速導覽
回 C# 教材
回首頁


參考資料
Standard ECMA-334 C# Language Specification
msdn: 繼承 (C# 程式設計手冊)
msdn: new 修飾詞 (C# 參考)

沒有留言: