ООП в VB.NET - Ребенок, Родитель, Родители - PullRequest
5 голосов
/ 04 сентября 2010

Я пытаюсь сделать что-то здесь с VB, что, я думаю, я не понимаю, как это сделать точно.Извините, я не так хорош в ООП.

У меня есть несколько вещей, которые я создаю, и у них есть два значения - имя родителя и имя ребенка (да, настоящие люди!).

Так было бы так:

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. Родитель: Джонатан Мерри
  2. Ребенок: Карл Мерри
Родитель: Кэтлин Андерсон Ребенок: Стивен Андерсон Ребенок: Дебора Андерсон Ребенок: Томас Андерсон Родитель: Сюй Цзин Ребенок: Лю Мин Ребенок: Лю Нин

(обратите внимание на последнее - фамилии родителей / детей не нужносоответствовать - в этом случае дети берут фамилию отца вместо матери, но мы не перечисляем отца).

Как бы я создал классы такого типа, чтобы я мог добавлять детей вparent, добавьте родителя к родителям, а затем убедитесь, что он поддается записи с помощью чего-то вроде Linq?

Заранее спасибо.

1 Ответ

6 голосов
/ 04 сентября 2010

Поскольку все они люди, возможно, вместо этого должен быть класс Person.Каждый человек может Mother, 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

Обновление
Вот более полный (и несколько переработанный) пример, который, возможно, может помочьПролить свет:

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