在VB.NET中處理建構函式時值得注意的兩個陳述

來源:互聯網
上載者:User
   在VB.NET中處理建構函式時,有兩個陳述值得注意:

  (1) 如果類型不包含任何執行個體建構函式聲明,則VB.NET提供預設的建構函式;

  預設參數調用直接基類的無參數建構函式。如果基類沒有可訪問的無參數建構函式,則發生編譯期錯誤。

  (2) 建構函式不能繼承;

  陳述(1)包含兩個方面的資訊:①是如果類型不包含任何執行個體建構函式聲明,則VB.NET提供預設的建構函式,即下面的聲明是允許的,在類Shape中我們沒有顯式聲明任何建構函式,但是我們仍然可以通過VB.NET自動提供的無參數建構函式New()來執行個體化類;
Module TestModule Test

    Public Sub Main()Sub Main()

        Dim shape1 As Shape = New Shape

    End Sub

End Module


Public Class ShapeClass Shape

    Public Sub Draw()Sub Draw()

        'some codes here.

    End Sub

End Class

  ②是如果類型中包含有執行個體建構函式的聲明,那麼VB.NET不再提供預設的建構函式,例如,我們在類Shape中添加了一個帶參數的建構函式,
Public Class ShapeClass Shape

    Private _pt As Point

    Public Sub New()Sub New(p As Point)

        _pt = p

    End Sub

    Public Sub Draw()Sub Draw()

        'some codes here.

    End Sub

End Class

  那麼,如果直接執行個體化類時,則會產生錯誤;
    Dim shape1 As Shape = New Shape

  只能通過調用Shape類中顯式聲明的帶參數的建構函式來執行個體化類,如下,
    Dim shape1 As Shape = New Shape(New Point(0, 0))

  因此,如果要在類中同時使用無參數和帶參數的建構函式,必須同時顯式地聲明兩種建構函式。
Public Class ShapeClass Shape

    Private _pt As Point

    Public Sub New()Sub New()

        'some codes here.

    End Sub

    Public Sub New()Sub New(p As Point)

        _pt = p

    End Sub

    Public Sub Draw()Sub Draw()

        'some codes here.

    End Sub

End Class

  陳述(2),建構函式不能繼承,即,如果要使子類與基類有相同的建構函式,那麼必須在每個子類中都顯式的聲明與基類構造相同的建構函式,例如:
Public MustInherit Class ShapeClass Shape

    Private _pt As Point

    Public Sub New()Sub New()

        'some codes here.

    End Sub

    Public Sub New()Sub New(p As Point)

        _pt = p

    End Sub

    Public MustOverride Sub Draw()Sub Draw()

End Class


Public Class LineClass Line

    Inherits Shape

    Public Sub New()Sub New()

    End Sub

    Public Sub New()Sub New(p As Point)

        MyBase.New(p)

    End Sub

    Public Overrides Sub Draw()Sub Draw()

        'some codes here.

    End Sub

End Class


  這一點非常重要而且也很有意義。因為我們往往傾向於認為子類繼承了基類所有的屬性和方法,這往往導致我們的程式出現編譯錯誤。

  綜合以上兩個陳述,在實際編程中應遵循一個原則:在類中,無論是基類還是子類,顯式地聲明所有需要的無參數或帶參數建構函式。遵循這個原則,既有利於提高編譯正確代碼的速度,也有利於自己和其他程式員理解代碼。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.