2013-03-27 32 views
0

當提及在建對象無效是否有這樣做有什麼區別:VB.NET - 調用另一個構造

Public Class Class1 
    Protected Test1 As String 
    Public Sub New(ByVal test2 As String) 
     Test1 = test2 
    End Sub 
End Class 

Public Class Class2 
    Inherits Class1 

    Public Sub New() 
     MyBase.New("called from class 2") 
    End Sub 

End Class 

這:

Public Class Class1 
    Protected Test1 As String 
End Class 

Public Class Class2 
    Inherits Class1 

    Public Sub New() 
     Test1 = "Called from class 2" 
    End Sub 
End Class 

在第一個例子,超類實例變量在構造函數中初始化。在第二個例子中,超類實例變量在子類中初始化。

我之所以這樣問是因爲我想從子類做到這一點:

Public Sub New() 
     MyBase.New(     System.Configuration.ConfigurationManager.AppSettings.Item("PurgeFile" & Me.GetType.Name), & _ 
       System.Configuration.ConfigurationManager.AppSettings.Item("PurgeHeader" & Me.GetType.Name)) 
     End Sub 

,我得到一個錯誤:「引用到正在建設中的對象調用另一個構造函數時是無效的」。

回答

2

不能通話中使用Me,所以下面的代碼部分是無效的:

Me.GetType.Name 

更新

有巨大差異的2個樣品:第一個不允許Class1沒有構造參數的初始化,第二個是。

我寧願想是這樣的:

Public MustInherit Class Class1 
    Public MustOverride ReadOnly Property Test1 As String 
End Class 

Public Class Class2 
    Inherits Class1 

    Private _Test1 As String = "Called from class 2" 

    Public Overrides ReadOnly Property Test1 As String 
     Get 
      Return _Test1 
     End Get 
    End Property 
End Class 

Reference from MSDN

+0

感謝。有沒有解決的辦法?我的第二個代碼片段也許。 – w0051977 2013-03-27 12:18:21

+0

首先分配給變量... – Paul 2013-03-27 12:20:50

+0

@Westie在調用基類構造函數之前,他無法做到這一點。 w0051977:我認爲沒有解決方法。 – MarcinJuraszek 2013-03-27 12:21:08

相關問題