2010-08-12 91 views
0

我有一個類FileDoc類從另一個類

Public Class FileDoc 
Inherits BaseClass 

Public Sub DeleteDoc() 

dim catId as integer = Cat_ID 

End Sub 

    a bunch of properties... 
End Class 

而且我還有一個類繼承...

Public Class BaseClass 

Private _Cat_ID As Integer 
Public Property Cat_ID() As Integer 
    Get 
     Return _Cat_ID 
    End Get 
    Set(ByVal value As Integer) 
     _Cat_ID = value 
     AssignAllInfo() 
    End Set 
End Property 

Private _Docs As List(Of FileDoc) 
Public Property Docs() As List(Of FileDoc) 
    Get 
     Return _Docs 
    End Get 
    Set(ByVal value As List(Of FileDoc)) 
     _Docs = value 
    End Set 
End Property 

我的問題是,既然FileDoc來自BaseClass的,我怎麼能訪問當我在FileDoc類中編碼時,來自BaseClass的值。就像我在子DeleteDoc()中的例子,我試圖訪問這個FileDoc所屬的基類的Cat_ID。

添加繼承不會將值傳遞給類,只有屬性。

Thx預先

+0

您可以添加一個標籤語言。謝謝。 – avacariu 2010-08-12 18:28:10

回答

0

繼承不這樣做。請記住,您正在使用Classes,這是您的對象的一種模板。您正在將它與實例混合,它是包含數據的類的實例化版本。

例如,當您創建FileDoc的實例時,您會看到一個空白對象,其中包含BaseClassFileDoc的字段。 FileDoc不知道是否存在其他包含數據的實例(也不應該包含數據)BaseClass。想想這樣 - 如果你有多個BaseClass實例,然後你實例化了一個FileDoc類,它應該使用哪個實例來填充數據?

有兩種方法可以去做你想做的事情。首先,你可以想象你的BaseClass是抽象的(不知道如何在VB中做到這一點)。所以你不會實例化任何BaseClass的實例。 BaseClass完全存在以提供其他類可以繼承的基礎。所以,你要做的是實例化FileDoc,然後用你需要的數據填充它。

您的其他選項有一個BaseClass,但不是從它繼承。相反,您可以將FileDoc看作是接受BaseClass作爲參數的包裝。所以這意味着FileDoc有一個BaseClass類型的私人成員。這樣你就不需要繼承,但你可以訪問BaseClass的數據。

選擇適合您情況的方法。

+0

所以,我應該發送一個BaseClass的實例到FileDoc? 我該怎麼做? – Iggy 2010-08-12 18:08:05

+0

在VB中沒有真正完成OOP,但是你可以維護一個屬性類型爲BaseClass的? 'Private baseClassInstance As BaseClass'。 – 2010-08-12 18:21:45

+0

我在FileDoc中添加了一個Cat_ID屬性,並在實例化FileDoc的一個實例時設置了它... thx幫助 – Iggy 2010-08-12 18:39:21