【问题标题】:Newbie to Interface and oop concepts接口和 oop 概念的新手
【发布时间】: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 是具有不同属性的不同类...我建议将它们都传递...否则,只需将您的参数声明为对象...然后您将不得不进行一些检查。 ..

标签: vb.net oop interface


【解决方案1】:

您所要求的实际上是不可能的。 Alpha 和 Bravo 是不同的类型,因此它们的 StartDate 属性是不同的属性。他们同名的事实并没有改变这一点。您可以使用后期绑定,但那将是一个肮脏的 hack。

即使您使用StartDate 属性定义了一个接口并让Alpha 和Bravo 实现了它,它仍然不允许您将List(Of Alpha) 或List(Of Bravo) 传递给期望的参数List(Of ISomeInterface)。

如果您有这样的接口,您至少可以编写一个具有该类型参数的方法,然后在带有List(Of Alpha) 和List(Of Bravo) 参数的方法中的循环中调用它。

【讨论】:

  • 好的,所以我让我的 AlphaList 和 BetaList 实现了一个接口,并将该接口传递给函数。 “编写一个具有该类型参数的方法......”是什么意思
  • 您必须为Alpha 和Bravo 实现一个接口,以便StartDate 成为同一个成员,并为AlphaList 和BravoList 提供第二个接口来实现,这样你就可以拥有一个带有该类型参数的方法。
  • 谢谢!明白了..我想我可以将它可视化...我会看看我是否可以实现它。
猜你喜欢
  • 2018-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-30
相关资源
最近更新 更多