2012-02-01 3 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

+0

나는 조언을 원한다 :'Dim F1 As IFruit = New FruitExtended()' – vulkanino

+0

고마워, 알았다. 두 인터페이스 (예 : A, B)에서 구현 된 클래스가 인터페이스로 매개 변수로 일반 메서드를 정의하는 방법을 가정하십시오? 그 방법에서 param (A 또는 B 여야 함)의 유형이 무엇인지 의미합니까? – Dinu

답변

0

난 당신의 코드를 시도하지만하지 않았다 - 일반적으로 - 그들이 오히려 상태 (속성)보다 behaviuor을 정의하기 때문에 인터페이스가 좋다. 어쩌면 당신은 당신의 디자인을 다시 생각해보고 ProcessFruit이 IFruit과 어떤 관계가 있는지를 스스로에게 물어볼 수 있습니다.

일부 언어는 상수 이외의 인터페이스에서 속성을 선언 할 수 없습니다. 자바가 그 예입니다.

관련 문제