2012-07-26 65 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即E1實例爲依據intTest價值一匹馬或動物做的方式來使用多態。如果是這種情況,那麼有人可以推薦一種設計模式嗎?只要你的期望是,只需要處理一個IEatable對象

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

+0

問題是e1是一個Eatable對象,當你用它來創建一個Horse時,'Eat(byval food as string)'將不可用。 – LarsTech 2012-07-26 17:03:38

+0

@LarsTech,我已經刪除了這個錯誤。這不是我正在做的。是否正如我在TestFunction中所做的那樣使用接口,即在運行時決定創建一個實例的對象是什麼? – w0051977 2012-07-26 17:16:49

+0

看起來很好。由於這個問題沒有解決具體問題,所以很難回答。你的'TestFunction'基本上說「我只想處理一個可食用的對象」,你做到了。 – LarsTech 2012-07-26 17:21:14

回答

0

沒有什麼根本性的錯誤代碼(不是你的接口之外應該用大寫字母「I」開頭)。

如果你最終需要確定你有動物的「什麼」之類的,這樣的事情:

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 2012-07-26 17:43:24

+0

@ w0051977'TypeOf'有其用途,但是如果您需要使用它來區分IEatable對象,那麼是的,您的界面設計不正確。當你在代碼中傳遞IEatable對象時,你不需要知道或關心它是馬還是牛。 – LarsTech 2012-07-26 17:48:55