二月 21

繼承建構子(Constructor),這看起來既有學問又深奧的文字

不要怕,以下我用白話文解釋一下

把繼承建構子分解後,就是 繼承 + 建構子

繼承,相信有物件導向概念的朋友應該都知道這2個字的意思

建構子(Constructor),就是用來進行物件初始化的方法

一般來說,Class B 繼承 Class A 之後就可以使用Class A所開放出來的東西

那麼如果Class B 繼承 Class A後,想要對Class A進行初始化的動作,那就需要使用繼承建構子了

先來看看程式吧,看程式就比較不會那麼文謅謅了。程式碼可於這邊下載(C#、VB.NET雙版本)

首先有一個最基本的Class,我們叫它Class A

C#版本Class A

class ClassA
{
    public ClassA()
    {
        _InitString = "123";
    }

    public ClassA(string initStr)
    {
        _InitString = initStr;
    }

    private string _InitString;
    public string InitString
    {
        get { return _InitString; }
    }

    public void ShowClassAInit()
    {
        Console.WriteLine(InitString);
        Console.WriteLine("-----------------------------");
    }
}

VB.NET版本Class A

Class ClassA
    Public Sub New()
        _InitString = "123"
    End Sub

    Public Sub New(ByVal initStr As String)
        _InitString = initStr
    End Sub

    Private _InitString As String
    Public ReadOnly Property InitString() As String
        Get
            Return _InitString
        End Get
    End Property

    Public Sub ShowClassAInit()
        Console.WriteLine(InitString)
        Console.WriteLine("-----------------------------")
    End Sub
End Class

接下來我們需要Class B來繼承Class A

注意到了嗎,繼承建構子的實作方式就是於Class B加入一個與Class A一樣的初始建構子

並使用base(C#語法)、MyBase.New(VB.NET語法)把初始值帶入Class A。成功於Class B內,進行初始化Class A的動作

C#版本Class B

class ClassB : ClassA
{
    public ClassB()
    {
    }

    public ClassB(string initStr)
        : base(initStr)
    {
    }
}

VB.NET版本Class B

Class ClassB
    Inherits ClassA

    Public Sub New()
    End Sub

    Public Sub New(ByVal initStr As String)
        MyBase.New(initStr)
    End Sub

End Class

接下來就看看怎麼使用,跟使用的結果吧
下面使用Console來DemoC#版本Console


class Program
{
    static void Main(string[] args)
    {
        ClassA CA1 = new ClassA();
        Console.WriteLine("new ClassA()");
        CA1.ShowClassAInit(); //Result:123

        ClassA CA2 = new ClassA("Init AAA");
        Console.WriteLine("new ClassA(\"Init AAA\")");
        CA2.ShowClassAInit(); //Result:Init AAA

        ClassB CB1 = new ClassB();
        Console.WriteLine("new ClassB()");
        CB1.ShowClassAInit(); //Result:123

        ClassB CB2 = new ClassB("Init BBB");
        Console.WriteLine("new ClassB(\"Init BBB\")");
        CB2.ShowClassAInit(); //Result:Init BBB

        Console.ReadLine();
    }
}

VB.NET版本Console


Module Module1

    Sub Main()
        Dim CA1 As New ClassA()
        Console.WriteLine("new ClassA()")
        CA1.ShowClassAInit()  'Result:123

        Dim CA2 As New ClassA("Init AAA")
        Console.WriteLine("new ClassA(""Init AAA"")")
        CA2.ShowClassAInit()  'Result:Init AAA

        Dim CB1 As New ClassB
        Console.WriteLine("new ClassB()")
        CB1.ShowClassAInit()  'Result:123

        Dim CB2 As New ClassB("Init BBB")
        Console.WriteLine("new ClassB(""Init BBB"")")
        CB2.ShowClassAInit()  'Result:Init BBB

        Console.ReadLine()

    End Sub

End Module

執行結果如下圖
20110221_1

以上程式碼可於這邊下載(C#、VB.NET雙版本)