こんにちは、訪問メソッドを装飾することなく、訪問者パターンを同様に実装する方法を模索しています。私は VB.NET で Option Strict Off を使用できることを知りましたが、いくつかの副作用があります。基本クラスの Shape から継承する一連の Shape クラスがあります。Accept の形状を表す次のクラスがあるとします。
Public Class ShapeAcceptor
Public Sub New()
MyBase.New
End Sub
Public Sub AcceptShape(s as Shape)
AcceptAny(s)
End sub
Private Sub AcceptAny(o as Object)
Accept(o)
End sub
Private Sub Accept(byval s as Shape)
Console.writeLine("Shape")
End Sub
Private Sub Accept(byval s as Square)
Console.WriteLine("Square")
End sub
Private Sub Accept(byval s as Circle)
Console.writeLine("Circle")
End Sub
Private Sub Accept(byval s as Triangle)
Console.writeLine("Triangle")
End Sub
End Class
これは、Option Explicit がオフになっている場合に機能します。ただし、別の方法で AcceptShape メソッドを呼び出すプログラムはコンパイルされますが、実行時例外が発生します。これをコンパイル時のエラーにするにはどうすればよいでしょうか?
Public Class Application
Public Shared Sub Main()
Dim acceptor as new ShapeAcceptor
Dim env as new Envelope
For Each s as Shape in env.Items
acceptor.AcceptShape(s)
Next
acceptor.AcceptShape(new NotAShape())
End Sub
End Class