none
MyBase的用途? RRS feed

  • 問題

  • 大家好,
    我弄不清楚在子類別(sub class)的意思是甚麼? 在參考書上的問題程式碼是這樣的。

    Class 1

    Public Class TextLine
        Public Line As String
        ' 建構子(1)
        Public Sub New()
            Line = ""
        End Sub
        ' 建構子(2)
        Public Sub New(text As String)
            Line = text
        End Sub
        ' 物件方法
        Public Function GetWord() As String
            Dim arrWords() As String = Split(Line, " ")
            Return (arrWords(0))
        End Function
        ' 可覆寫的方法
        Public Overridable Sub ShowText()
            Console.WriteLine(LCase(Line))
        End Sub
    End Class

    Class 2

    Public Class MyLine
        Inherits TextLine
        ' 建構子
        Public Sub New()
            MyBase.New()
        End Sub
        ' 新增屬性
        ReadOnly Property Length() As Long
            Get
                Return Len(MyBase.Line)
            End Get
        End Property
        ' 新增方法
        Public Function InStr(str As String) As Integer
            Dim arrWords() As String =
                              Split(MyBase.Line, " ")
            Dim i As Integer
            For i = 0 To UBound(arrWords)
                If arrWords(i) = str Then
                    Exit For
                End If
            Next i
            If i < UBound(arrWords) Then
                Return i + 1
            End If
            Return -1
        End Function
        ' 覆寫方法
        Public NotOverridable Overrides Sub ShowText()
            Console.WriteLine(MyBase.Line)
        End Sub
    End Class

    Module 1

    Module Module1
        Sub Main()
            Dim line As MyLine = New MyLine()
            Dim txtline As TextLine =
                           New TextLine("THIS IS A BOOK.")
            txtline.ShowText()
            Console.WriteLine("第1個字: " & txtline.GetWord())
            line.Line = "That is a pen."
            line.ShowText()
            Console.WriteLine("字串長度: " & line.Length)
            Console.WriteLine("第1個字: " & line.GetWord())
            Console.WriteLine("找尋is: " & line.InStr("is"))
            line = Nothing
            txtline = Nothing
            Console.Read()
        End Sub
    End Module

    我發覺在class 2中把MyBase關鍵字刪去後,結果還是一樣的。是否說MyBase其實沒有實際作用呢?

    2017年3月12日 下午 12:45

解答

  • 因為如果你不寫,編譯器會在編譯的時候幫你加回去。不過他不會加在你的原始碼,而是加在編譯後的 IL Code 裡面。

    建構式的預設行為就是呼叫父類別的無參數建構式。你可以把父類別的無參數建構式刪掉,只留下那個有一個參數的建構式 , 子類別的建構式也不要加  MyBase.New(),

    正常來說,編譯應該會失敗。因為會找不到父類別的無參數建構式。


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。



    2017年3月12日 下午 04:49
    版主

所有回覆

  • 因為如果你不寫,編譯器會在編譯的時候幫你加回去。不過他不會加在你的原始碼,而是加在編譯後的 IL Code 裡面。

    建構式的預設行為就是呼叫父類別的無參數建構式。你可以把父類別的無參數建構式刪掉,只留下那個有一個參數的建構式 , 子類別的建構式也不要加  MyBase.New(),

    正常來說,編譯應該會失敗。因為會找不到父類別的無參數建構式。


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。



    2017年3月12日 下午 04:49
    版主
  • 明白了。真的很感謝你的回答。
    2017年3月13日 下午 02:19
  • 若是此問題已獲得解決,請標示對你有用的回答為解答,以利結案。

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2017年3月13日 下午 03:18
    版主