2011-01-28 86 views
0

不確定如何提出這個問題......我的一些條款可能不正確,但希望我能夠得到這個問題。如果我有一類這樣的事情在VB.net中的繼承

Public Class Agency 
    public property ID as integer=0 
    public property Name as string=string.empty 
    Public sub new() 
    end sub 
end class 

,然後一個工廠類,返回一個列表

Public Class Agency_Controller 
    Public Sub New() 
    end sub 

Public function Fetch() as list(of Agency) 
    pop the list and return it 
end function 
end class 

如果我創建另一個類說Agency_Misc並希望繼承該機構I類得到的,如何去做?

Public Class Agency_Misc 
inherits Agency 
public property Address as string=string.empty 

末級

現在,如果我想使用Agency_Misc,我怎麼得到Agency_Controller取功能?在代碼中,如果我在代理後打算......我像做 點心OS爲(的機構)名單=無 暗淡攝氏度作爲新Agency_Controller OS = oc.Fetch()

但是如果我想我的名單有(Agency_Misc的)名單(因爲我正在做更多的東西) 我該怎麼做。我不能將清單(代理機構)更改爲清單(Agency_Misc),因爲它會告訴我它無法將其轉換,我認爲它是。

無論如何......我想了解我失蹤的是什麼,或者我需要考慮的其他方法。

回答

1

如果你已經正確定義你的類,你可以做到以下幾點:

定義的BaseClass 。 定義DerivedClass從BaseClass的

定義列表(中BaseClass的)繼承與DerivedClass(名單將接受Dervived類對象的對象來填充它,因爲這些都是通過繼承,也是對象的BaseClass的。

訪問列表中的項目與類型DerivedClass的變量。

你不能做的是填充型的BaseClass的對象列表中,然後嘗試使用類型DerivedClass的變量來訪問它們。

例#1這將工作:

Public Class Form1 
Private MyListOfBaseCLass As List(Of MyBaseClass) 

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

    MyListOfBaseCLass = New List(Of MyBaseClass) 

    Dim dc As New MyDerivedCLass("City of Portland", "555 SW 5th Avenue") 
    MyListOfBaseCLass.Add(dc) 

    dc = New MyDerivedCLass("City of Salem", "222 E River Road") 
    MyListOfBaseCLass.Add(dc) 

    dc = New MyDerivedCLass("City of Denver", "333 SomeStreet") 
    MyListOfBaseCLass.Add(dc) 
End Sub 

Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click 
    For Each dc As MyDerivedCLass In MyListOfBaseCLass 
     MsgBox(dc.MyName & ", " & dc.MyAddress) 
    Next 
End Sub 
End Class 

這將失敗:

Public Class Form1 
Private MyListOfBaseCLass As List(Of MyBaseClass) 

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

    MyListOfBaseCLass = New List(Of MyBaseClass) 

    Dim dc As New MyBaseClass("City of Portland") 
    MyListOfBaseCLass.Add(dc) 

    dc = New MyBaseClass("City of Salem") 
    MyListOfBaseCLass.Add(dc) 

    dc = New MyBaseClass("City of Denver") 
    MyListOfBaseCLass.Add(dc) 
End Sub 

Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click 
    For Each dc As MyDerivedCLass In MyListOfBaseCLass 
     MsgBox(dc.MyName & ", " & dc.MyAddress) 
    Next 
End Sub 
End Class 
+0

確定..感謝您的幫助 – jvcoach23 2011-01-28 14:51:04

0

你最好在構造

Public Class Agency 

    Private m_ID As Integer 
    Public Property ID() As Integer 
     Get 
      Return m_ID 
     End Get 
     Set(ByVal value As Integer) 
      m_ID = value 
     End Set 
    End Property 


    Private m_name As String 
    Public Property Name() As String 
     Get 
      Return m_name 
     End Get 
     Set(ByVal value As String) 
      m_name = value 
     End Set 
    End Property 

    Sub New(ByVal id As Integer, ByVal name As String) 
     Me.m_ID = id 
     Me.m_name = name 
    End Sub 

End Class 

設置的屬性...

Dim HiDollar as New Agency(100, "High Dollar")