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();
}