嗨,我正在探索在没有所有装饰访问方法的情况下实现类似访问者模式的方法。到目前为止,我发现我可以在 VB.NET 中使用 Option Strict Off,但它有一些副作用。我有一组继承自基类 Shape 的 Shape 类。假设我们有以下接受形状的类:
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