C# 繼承(Inheritance) Class 說明

物件導向的方便之處在於,可以被拿來重複使用及擴充 例如,今天新增了使用者檢視列表Class 如果在無法更動情況下,想要擴充新增使用者功能 就可以用繼承(Inheritance)的方式 而被繼承的Class,稱之為「基底類別」(Base Class)

但也要特別留意! C#不支援多重繼承 所以,只允許繼承一個「基底類別」(Base Class)

在C#中,是使用冒號(:)來繼承 例如,此範例中,B要繼承A:

public class A
{
}
//B要繼承A(Base Class)
public class B:A
{
}

繼承之後,就可以開始擴充功能

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        //建立 A 類別
        public class A
        {
            public string name;
            private int num = 0987654321;
            //建立方法 View()
            public void View()
            {
                Console.WriteLine("Your name is :" + name);
                Console.WriteLine("Your number is :" + num);
                Console.WriteLine("Show users list");
            }
        }

        //B繼承A
        class B : A
        {
            //此時,B已經擁有A的所有功能,接下來再繼續擴充其他功能
            public void Add()
            {
                Console.WriteLine("Add User");
            }
        }

        static void Main(string[] args)
        {
            //實例化B類別
            B x = new B();
            //呼叫B內的變數,並儲存值
            x.name = "Hi";
            //呼叫B內的方法
            x.View();
            //呼叫B內的方法
            x.Add();
        }
    }
}

透過 sealed 來禁止被繼承

Class 可以透過 sealed type 來宣告"禁止被其他class繼承"

Class A{
	//OK
}
//將B設定為sealed type
sealed Class B:A{
	//OK
}
Class C:A{
	//OK
}
Class C:B{
	//Error
}

C# 繼承 vs 建構子&解構子

(依照文章順序,在這裡還沒提到建構子解構子的應用,建議可以先瞭解這兩個的用法)

1. 基底類別的建構子及解構子無法被繼承的Class使用 2. 雖然Class無法繼承基底類別的建構子、解構子。但是在實例化時,基底類別的建構子及解構子仍會自動執行

實際看例子來理解用法:

class A
{
    public A()
    {
        Console.WriteLine("A created");
    }
    ~A()
    {
        Console.WriteLine("A deleted");
    }
}
class B : A
{
    public B()
    {
        Console.WriteLine("B created");
    }
    ~B()
    {
        Console.WriteLine("B deleted");
    }
}
static void Main(string[] args)
{
    //實例化B類別
    B x = new B();
}