2012-02-01 53 views
0

如何将从派生类初始化的对象传递给以Interface作为参数的方法?下面是我正在尝试的例子。可能吗?请提出任何更好的方法。在C#或vb.net中使用接口作为方法参数

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 
+0

你试过了吗?只需要几秒钟就可以自己得到答案。 – Oded 2012-02-01 10:29:00

+0

我建议要做的事:'昏暗的F1作为IFruit =新的FruitExtended()' – vulkanino 2012-02-01 10:36:16

+0

谢谢,明白了。假设如果我有一个从两个接口(比如A,B)实现的类如何定义一个以接口为参数的泛型方法?我的意思是该方法中应该是什么类型的param(应该是A还是B)? – Dinu 2012-02-01 10:46:55

回答

0

我没有尝试你的代码,但 - 一般 - 接口是好的,因为它们定义一个behaviuor而不是一个状态(属性)。所以,也许你可以重新思考你的设计,并问自己ProcessFruit应该怎么处理IFruit。

有些语言甚至不允许在接口中声明属性,而不是常量。 Java是一个例子。