VB.NET構造函數(shù)實際處理方式簡介
在開發(fā)領域,已經(jīng)出現(xiàn)了許多種開發(fā)語言供編程人員隨自己的需求進行選擇應用。比如VB.NET語言就可以對有特定需求的開發(fā)人員進行一定的幫助。VB.NET構造函數(shù)進行處理的時侯,有兩個陳述值得注意: #t#
(1) 如果類型不包含任何實例構造函數(shù)聲明,則VB.NET提供默認的構造函數(shù);
默認參數(shù)調用直接基類的無參數(shù)構造函數(shù)。如果基類沒有可訪問的無參數(shù)構造函數(shù),則發(fā)生編譯期錯誤。
(2) 構造函數(shù)不能繼承;
陳述(1)包含兩個方面的信息:
①是如果類型不包含任何實例構造函數(shù)聲明,則VB.NET提供默認的構造函數(shù),即下面的聲明是允許的,在類Shape中我們沒有顯式聲明任何構造函數(shù),但是我們仍然可以通過VB.NET自動提供的無參數(shù)構造函數(shù)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
②是如果類型中包含有實例構造函數(shù)的聲明,那么VB.NET不再提供默認的構造函數(shù),例如,我們在類Shape中添加了一個帶參數(shù)的構造函數(shù),
- 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
那么,如果直接實例化類時,則會產(chǎn)生錯誤;
Dim shape1 As Shape = New Shape
只能通過調用Shape類中顯式聲明的帶參數(shù)的構造函數(shù)來實例化類,如下,
Dim shape1 As Shape = New Shape(New Point(0, 0))
因此,如果要在類中同時使用無參數(shù)和帶參數(shù)的構造函數(shù),必須同時顯式地聲明兩種構造函數(shù)。
- 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),構造函數(shù)不能繼承,即,如果要使子類與基類有相同的構造函數(shù),那么必須在每個子類中都顯式的聲明與基類構造相同的構造函數(shù),例如:
- 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
這一點非常重要而且也很有意義。因為我們往往傾向于認為子類繼承了基類所有的屬性和方法,這往往導致我們的程序出現(xiàn)編譯錯誤。
綜合以上兩個陳述,在實際編程中應遵循一個原則:在類中,無論是基類還是子類,顯式地聲明所有需要的無參數(shù)或帶參數(shù)構造函數(shù)。遵循這個原則,既有利于提高編譯正確代碼的速度,也有利于自己和其他程序員理解代碼。