OOP in VB.NET - Child, Parent, Parents
I'm trying to do something here with VB that I guess I'm not understanding how to do it exactly. Sorry I'm not that good at OOP.
I have a number of things I'm creating and they have two values - parent name and child name (yes, actual people!).
So it would be like this:
Public Class Child
Public Property ParentName As String
Public Property ChildName As String
End Class
And then:
Public Class Parent
Public Property ParentName As String
Public Property ChildName() As String
End Class
Then I need to add these to a Parents
class where a Parent can have one or more children.
I start by adding a Child. If that child's Parent name already exists, just add the Child's name to that parent, but if it doesn't exist, create a new parent (with that child). Then add all parents to a collection of parents (with their 1 or more children).
A resulting list would look something like this:
Parents:
- Parent: Jonathan Murry
- Child: Carl Murry
- Parent: Kathleen Anderson
- Child: Steven Ande开发者_运维知识库rson
- Child: Deborah Anderson
- Child: Thomas Anderson
- Parent: Xu Jing
- Child: Liu Ming
- Child: Liu Ning
(note on the last one - the parent/child last names don't need to match - in this case, the children take the father's last name instead of the mother's, but we don't list the father).
How would I create these type of classes so that I can add children to a parent, add a parent to parents and then ensure it is querable with something like Linq?
Thx in advance.
Since all of them are persons, perhaps there should instead be a Person
class. Each person may a Mother
, a Father
and a collection of Children
. That way you can create graphs over several generations and with all sorts of constellations.
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
Update
Here is a fuller (and somewhat reworked) example that perhaps can help to shed some light:
The Person
class, slightly changes (replaced Mother
/ Father
with Parent
, made the Children
property `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
And a sample program creating a Person
list, and posing a LINQ query.
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
精彩评论