代码之家  ›  专栏  ›  技术社区  ›  Stan

VB.NET中的OOP-子级、父级、父级

  •  5
  • Stan  · 技术社区  · 14 年前

    我想用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 类,其中父级可以有一个或多个子级。

    我先添加一个孩子。如果该子级的父级名称已经存在,只需将该子级的名称添加到该父级,但如果该子级不存在,则创建一个新的父级(使用该子级)。然后将所有父对象添加到父对象集合中(包含其1个或多个子对象)。

    结果列表如下所示:

    父母:

    1. 父母:乔纳森·默里
      1. 孩子:卡尔·默里
    2. 父母:凯瑟琳·安德森
      1. 孩子:史蒂文安德森
      2. 孩子:黛博拉·安德森
      3. 孩子:托马斯·安德森
    3. 家长:Xu Jing
      1. 孩子:刘明
      2. 孩子:刘宁

    (注意最后一个-父母/孩子的姓氏不需要匹配-在这种情况下,孩子使用父亲的姓氏而不是母亲的,但我们不列出父亲)。

    我如何创建这些类型的类,以便可以向父类添加子类,向父类添加父类,然后确保它可以用类似linq的东西查询?

    提前通知。

    1 回复  |  直到 14 年前
        1
  •  6
  •   Fredrik Mörk    14 年前

    因为他们都是人,也许应该有一个 Person 班级。每个人都可以 Mother A Father 以及 Children . 这样,您就可以创建多代的图表,以及各种各样的星座。

    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
    

    更新
    这里有一个更完整(也有些修改)的例子,可能有助于揭示一些问题:

    这个 等级,稍有变化(已更换 母亲 / 父亲 具有 Parent 制造了 儿童 属性'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
    

    以及创建 列出并设置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