2012-07-26 3 views
0

내 프로젝트에서 인터페이스를 더 많이 사용하려고합니다. 내가 온라인에서 보았던 많은 예제들은 경쾌하지만 도움이된다. 아래의 코드에서 참조하시기 바랍니다 :인터페이스에 대한 .net 디자인 패턴

Public Class Animal 
    Implements Eatable 
    Public Overridable Sub Eat() Implements Eatable.Eat 
     MsgBox("Animal Eat no arguement") 
    End Sub 
Public Overridable Overloads Sub Eat(ByVal food As String) Implements Eatable.Eat 
    MsgBox("Animal Eat food arguement") 
End Sub 
End Class 

Public Class Horse 
    Inherits Animal 
    Implements Eatable 
    Public Overrides Sub Eat() 
     MsgBox("Horse Eat no arguement") 
    End Sub 
    Public Overloads Sub Eat(ByVal food As String) 
     MsgBox("Horse Eat food arguement") 
    End Sub 
End Class 

Public Interface Eatable 
    Sub Eat() 
    Sub Eat(ByVal localEat As String) 
End Interface 

Public Class Form1 

    Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     TestFunction(1) 
    End Sub 

    Public Sub TestFunction(ByVal intTest As Integer) 
     Dim e1 As Eatable 
     If intTest = 1 Then 
      e1 = New Horse 
     Else 
      e1 = New Animal 
     End If 
     'Functionality specific to e1 from here 
    End Sub 
End Class 

나는 내가 즉 TestFunction intTest의 값에 따라 말 또는 동물로 E1 인스턴스에서 수행 한 방법으로 다형성을 사용하는 것은 좋은 방법이 어떤 곳을 읽었다. 이 경우 누군가가 디자인 패턴을 추천 할 수 있습니까? 이 코드 근본적으로 아무 문제가 없습니다

+0

문제는 e1이 Eatable 객체이고 Horse를 사용하여 그것을 만들 때 '먹기 (문자열로)'를 사용할 수 없습니다. – LarsTech

+0

@LarsTech,이 버그를 삭제했습니다. 이것은 내가 얻고있는 것이 아니었다. TestFunction에서했던 것처럼 인터페이스를 사용하는 것이 옳은지, 즉 인스턴스를 생성 할 객체를 런타임에서 결정할 수 있습니까? – w0051977

+0

괜찮아 보인다. 문제는 특정 문제를 다루지 않기 때문에 대답하기가 어렵습니다. 당신의'TestFunction'는 기본적으로 "나는 오직 먹을 수있는 객체 만 다루고 싶다"라고 말합니다. – LarsTech

답변

0

(사용자 인터페이스 이외의 자본 "I"로 시작해야합니다) :

Dim e1 As Eatable 
If intTest = 1 Then 
    e1 = New Horse 
Else 
    e1 = New Animal 
End If 

을 한 만 IEatable 개체를 처리해야하는 기대가있다.

당신이이 같은이 동물의 "무엇을"어떤 결정하기 위해 필요로 끝날 경우 :

If TypeOf e1 Is Horse Then 
    MessageBox.Show("Yeah, you're a horse") 
Else 
    MessageBox.Show("You are not a horse") 
End If 

다음 당신이 뭔가를 잘못 설계 만난다합니다.

+0

고마워, 'TypeOf'연산자를 사용하는 것이 좋지 않다고 말하는거야? – w0051977

+0

@ w0051977'TypeOf'에는 용도가 있지만, IEatable 오브젝트가 무엇인지 구별하기 위해 사용해야하는 경우 인터페이스가 올바르게 설계되지 않았습니다. 코드에서 IEatable 객체를 전달할 때 말이나 암소인지는 알 필요가 없습니다. – LarsTech