我想在我的項目中使用更多的接口。我在網上看過的很多例子都很流行(但很有幫助)。請看看下面的代碼:.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
:
問題是e1是一個Eatable對象,當你用它來創建一個Horse時,'Eat(byval food as string)'將不可用。 – LarsTech 2012-07-26 17:03:38
@LarsTech,我已經刪除了這個錯誤。這不是我正在做的。是否正如我在TestFunction中所做的那樣使用接口,即在運行時決定創建一個實例的對象是什麼? – w0051977 2012-07-26 17:16:49
看起來很好。由於這個問題沒有解決具體問題,所以很難回答。你的'TestFunction'基本上說「我只想處理一個可食用的對象」,你做到了。 – LarsTech 2012-07-26 17:21:14