VB.NET中的OOP - 孩子,父母,父母

时间:2010-09-03 20:45:45

标签: vb.net oop

我正在尝试用VB做一些事情,我想我不知道如何完全做到这一点。对不起,我对OOP并不擅长。

我正在创建一些东西,它们有两个值 - 父名和子名(是的,实际的人!)。

所以它会是这样的:

Public Class Child
    Public Property ParentName As String
    Public Property ChildName As String
End Class

然后:

Public Class Parent
    Public Property ParentName As String
    Public Property ChildName() As String
End Class

然后我需要将这些添加到Parents课程中,其中父母可以有一个或多个孩子。

我首先添加一个Child。如果该子项的父名称已存在,则只需将Child的名称添加到该父项,但如果该项不存在,则创建一个新的父项(使用该子项)。然后将所有父母添加到父母的集合中(与他们的一个或多个孩子一起)。

结果列表如下所示:

父母:

  1. 父母:Jonathan Murry
    1. 孩子:Carl Murry
  2. 父母:凯瑟琳安德森
    1. 孩子:Steven Anderson
    2. 孩子:Deborah Anderson
    3. 孩子:Thomas Anderson
  3. 家长:徐静
    1. 孩子:刘明
    2. 孩子:刘宁
  4. (注意最后一个 - 父/子姓不需要匹配 - 在这种情况下,孩子取父亲的姓,而不是母亲,但我们不列出父亲。) / p>

    我如何创建这些类型的类,以便我可以将子项添加到父项,将父项添加到父项,然后确保它与Linq一样可以使用?

    提前谢谢。

1 个答案:

答案 0 :(得分:6)

由于他们都是人,或许应该有一个Person类。每个人可以是MotherFatherChildren的集合。通过这种方式,您可以创建几代图形和各种星座图。

Public Class Person
    Public Property Name As String
    Public Property Mother As Person
    Public Property Father As Person
    Public Property Children As List(Of Person)
End Class

<强>更新
这是一个更全面(并且有点重写)的例子,可能有助于揭示一些亮点:

Person类略有变化(用Mother替换Father / Parent,使Children属性为“ReadOnly”)

Public Class Person
    Public Property Name As String
    Public Property Parent As Person
    Private _children As New List(Of Person)

    Public ReadOnly Property Children As List(Of Person)
        Get
            Return _children
        End Get
    End Property

End Class

示例程序创建Person列表,并构成LINQ查询。

Module Program
    Sub Main()
        Dim persons As IEnumerable(Of Person) = GetPersonGraph()
        Dim jonathansChildren As IEnumerable(Of Person)
        jonathansChildren = persons.Where(Function(p) _
                                Not p.Parent Is Nothing _
                                AndAlso p.Parent.Name = "Jonathan Murphy")

        For Each child As Person In jonathansChildren
            Console.WriteLine(child)
        Next
    End Sub


    Function GetPersonGraph() As IEnumerable(Of Person)
        Dim result As New List(Of Person)
        Dim parent As Person
        Dim child As Person

        parent = New Person()
        parent.Name = "Jonathan Murphy"
        result.Add(parent)

        child = New Person()
        child.Name = "Carl Murry"
        child.Parent = parent
        parent.Children.Add(child)
        result.Add(child)

        Return result
    End Function
End Module