【发布时间】:2016-11-15 11:27:20
【问题描述】:
我了解 oop 中接口的概念,但实现它对我来说具有挑战性。这些是我的课程:
Public Class Alpha
Public Property Id As Integer
Public Property StartDate as Date
Public Property System as string
Public Sub Deserialize(ByVal row As DataRow)
Me.Id = row("Id ") ...
end sub
end class
Public Class Bravo
Public Property Id As Integer
Public Property StartDate as Date
Public Property Dosage as integer
Public Sub Deserialize(ByVal row As DataRow)
Me.Id = row("Id ") ...
end sub
end class
Public Class Parent
Public Property Id As Integer
Public Property Name as String
Public Property AdmitDate as Date
Public Sub Deserialize(ByVal row As DataRow)
Me.Id = row("Id ") ...
end sub
end class
Public Class AlphaList inherits List(of Alpha)
Public Sub Deserialize(table As DataTable)
For Each objRow As DataRow In table.Rows
Dim obj As New Bravo
obj.Deserialize(objRow)
Me.Add(obj)
Next
end sub
end Class
Public Class BravoList inherits List(of Bravo)
Public Sub Deserialize(table As DataTable)
For Each objRow As DataRow In table.Rows
Dim obj As New Bravo
obj.Deserialize(objRow)
Me.Add(obj)
Next
end sub
end Class
Public Class ParentList inherits List(of Parent)
Public Sub Deserialize(table As DataTable)
For Each objRow As DataRow In table.Rows
Dim obj As New Parent
obj.Deserialize(objRow)
Me.Add(obj)
Next
end sub
end Class
目前,我在 Class Parent 中有以下两个函数
public Sub RunA(aList as AlphaList )
For each item as Alpha in alist
item.Id ....
next
end sub
public Sub RunB(bList as BravoList )
For each item as Bravo in bList
item.Id ....
next
end sub
基本上,它们具有相同的实现,唯一不同的是参数 - AlphaList 或 BravoList。
我想在 Class Parent 中创建一个函数,它接受任何 AlhpaList 或 BravoList。我该怎么做?提前致谢!! ..我想把它全部提取出来并做一些类似(伪代码)的事情:
public sub Run ( anyList List of Alpha or Bravo, any list of List of Parent)
【问题讨论】:
-
创建一个接受
Alpha和Bravo的函数,它们将是不同的参数... -
但我只能拿一个 Alpha 或 Bravo,不能同时拿两个……
-
为什么只有一个?你可以通过它们...
Public Sub Run (ByVal alphaList As Alpha, ByVal bravoList As Bravo)...然后通过你需要的东西。要么根据需要传递两个对象,要么传递一个或另一个。 -
我可以,但我不想同时通过两个.. 我只想通过一个,因为实现是相同的。我不想在同一个函数中维护重复的代码。
-
Alpha 和 Bravo 是具有不同属性的不同类...我建议将它们都传递...否则,只需将您的参数声明为对象...然后您将不得不进行一些检查。 ..