首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 進階 (五):繼承、衍生類別與建構函式鏈

     編輯:關於C#

C# 繼承機制:實作繼承 vs 介面繼承、虛擬方法覆寫、基底建構函式鏈、密封與抽象

C# 單一類別繼承、多介面實作。繼承分「實作繼承」(擁有基底所有成員) 與「介面繼承」(僅簽名)。結構隱含繼承 ValueType 並可實作多介面。

一、基本繼承範例


public class BaseClass
{
    public string GetUrl() { return "www.gosoa.com.cn"; }
}

public class Test : BaseClass
{
    static void Main()
    {
        Test t = new Test();
        Console.WriteLine(t.GetUrl()); // 繼承基底方法
    }
}

二、虛擬方法與覆寫

  • 基底標記 virtual 允許覆寫。
  • 衍生類別必須用 override 明確覆寫。
  • 欄位與靜態方法不可 virtual。

public class BaseClass
{
    public virtual string GetUrl() { return "cnblogs.com"; }
}

public class BaseClass2 : BaseClass
{
    public override string GetUrl() { return "gosoa.com.cn"; }
}

public class Test : BaseClass2
{
    public override string GetUrl() { return "www.gosoa.com.cn"; }
    static void Main() { Console.WriteLine(new Test().GetUrl()); } // www.gosoa.com.cn
}

三、方法隱藏 (new)

衍生類別未加 override 時為隱藏 (new),編譯警告。隱藏不具多型行為。

四、呼叫基底版本 (base)


public class Test : BaseClass2
{
    public override string GetUrl()
    {
        string url = "https://";
        url += base.GetUrl(); // 呼叫 BaseClass2 版本
        return url;
    }
    static void Main() { Console.WriteLine(new Test().GetUrl()); } // https://gosoa.com.cn
}

五、抽象類別與密封類別

  • abstract:不可實例化,可含抽象方法 (無主體),衍生類別必須實作。
  • sealed:類別不可被繼承;方法不可被覆寫。

六、衍生類別建構函式執行順序

基底 → 衍生 依序執行。透過 base(參數) 顯式呼叫特定基底建構函式。


public class UserBase
{
    private string username;
    public UserBase() { Console.WriteLine("I'm good men"); }
    public UserBase(string username) { this.username = username; }
}

public class OneMen : UserBase
{
    public OneMen() { Console.WriteLine("Yes, I'm very good!"); }
    public OneMen(string username) : base(username) { Console.WriteLine(username + " is a good men!"); }
    public OneMen(string username, string site) : base(username) { Console.WriteLine(username + "'s site is " + site); }

    static void Main()
    {
        new OneMen();                    // I'm good men / Yes...
        new OneMen("pan");               // pan is a good men!
        new OneMen("pan", "www.gosoa.com.cn"); // pan's site is www.gosoa.com.cn
    }
}

七、總結

  1. 善用 virtual/override 實現多型,base 復用基底邏輯。
  2. 建構函式鏈確保物件從基底到衍生完整初始化。
  3. sealed 保護核心邏輯不被修改,abstract 強制衍生類別實作契約。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved