наследование в VB.net - PullRequest
       16

наследование в VB.net

0 голосов
/ 28 января 2011

Не совсем уверен, как задать этот вопрос ... Некоторые из моих терминов могут быть неверными, но, надеюсь, я смогу ответить на этот вопрос.Если у меня есть класс что-то вроде этого

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 Fetch?В коде, если я иду за агентством ... Я делаю что-то вроде Dim oS as list (of Agency) = ничего не тускнеет oC как новый Agency_Controller os = oc.Fetch ()

, но если я хочу, чтобы мойсписок, чтобы иметь список (из Agency_Misc) (потому что я делал еще кое-что), как мне это сделать.Я не могу изменить список (из агентства) в список (из Agency_Misc), потому что он скажет мне, что не может преобразовать его, я думаю, что это было.

В любом случае ... Я хотел бы узнать, что этомне не хватает или какой другой подход мне нужно изучить.

Ответы [ 2 ]

1 голос
/ 28 января 2011

Если вы правильно определили свои классы, вы можете сделать следующее:

Определить BaseClass.Определите DerivedClass, который наследуется от BaseClass

. Определите список (Of 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 голосов
/ 28 января 2011

Вы лучше всего установите свойства в конструкторе

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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...