【发布时间】:2012-02-24 00:57:53
【问题描述】:
如何将派生类初始化的对象传递给以Interface为参数的方法?下面是我正在尝试的示例。可能吗?请提出任何更好的方法。
Public Interface IFruit
Property Name As String
Property Color As String
End Interface
Public Class Fruit
Implements IFruit
Private _Name As String
Private _Color As String
Public Property Color As String Implements IFruit.Color
Get
Return _Color
End Get
Set(value As String)
_Color = value
End Set
End Property
Public Property Name As String Implements IFruit.Name
Get
Return _Name
End Get
Set(value As String)
_Name = value
End Set
End Property
End Class
Public Class FruitExtended
Inherits Fruit
Private _Taste As String
Public Property Taste() As String
Get
Return _Taste
End Get
Set(ByVal value As String)
_Taste = value
End Set
End Property
End Class
Public Class A
Public Sub ProcessFruit(F as IFruit)
'...
'Do something
End Sub
下面的代码可以工作吗?或者如何以其他方式实现这一目标?
Public Sub Test()
Dim F1 as new FruitExtended()
ProcessFruit(F1)
End sub
End Class
【问题讨论】:
-
你试过了吗?自己只需要几秒钟就能得到答案。
-
我建议这样做:
Dim F1 As IFruit = New FruitExtended() -
谢谢,知道了。假设如果我有一个从两个接口(比如 A,B)实现的类,如何定义一个以接口为参数的泛型方法?我的意思是该方法中的参数类型应该是什么(应该是 A 还是 B)?
-
如果一个方法只需要使用其中一个接口,参数一般应为该类型。如果许多方法都需要两者,并且您控制实现接口的类的代码,请定义一个继承前两个但不添加任何新成员的新接口,并让您的类实现它。然后使用该新接口作为参数类型。如果一个方法需要的对象恰好实现了两个接口,但不共享任何公共类或接口,则有一些方法可以处理它,但它们更复杂。