0

プロジェクトでインターフェースをもっと活用しようとしています。私がオンラインで見た多くの例は、興味深いものです (しかし役に立ちます)。以下のコードをご覧ください。

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 を馬または動物としてインスタンス化する方法でポリモーフィズムを使用するのは悪い習慣であることをどこかで読みました。この場合、誰かがデザインパターンを推奨できますか?

4

1 に答える 1

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

その後、何か間違ったものを設計してしまいました。

于 2012-07-26T17:35:24.207 に答える