我有一个继承自基类的类(这包含许多常见的数据库相关内容,并标记为MustInherit)。我想编写一个共享方法,在其中我调用基类方法,但编译器给我的消息'MyBase仅在实例方法中有效'。这个共享方法是一种日志记录方法,将在应用程序中大量使用,我试图避免每次要调用它时都必须实例化一个对象。
是否可以从共享方法访问基类方法?
答案 0 :(得分:3)
不,因为编译器声明你不能从共享方法调用实例方法。
由于类的实例与任何其他实例是分开的,因此每次对该实例上的方法的调用都可能产生不同的结果和副作用,因为实例方法可以访问实例的状态。共享方法无法访问任何实例的状态,因为共享方法在该类型的所有实例之间共享。
由于这种情况,不可能从共享方法调用实例方法,因为共享方法是“无实例”。
答案 1 :(得分:1)
好吧,因为共享方法没有状态,所以在您重新思考的情况下调用实例方法是不可能的,但是不要绝望在共享方法可以引用的字段级别始终存在共享实例化实例,你的案例maby是一个从你的基础继承的私人类
类似
Public Class Foo
private Shared ReadOnly Instance as New Somthing
Public Shared Function DooFoo as string
return instance.Getstring()
End Function
Private class Something : inherits baseclass
public function Getstring() as string
....
End function
End Class
End Class
答案 2 :(得分:1)
您实际上并不需要,因为您无法在VB中共享可覆盖的方法。您只需要像这样指定基类:
Class B
Public Shared Sub Foo()
' code
End Sub
End Class
Class D : Inherits B
Public Shared Sub Bar()
B.Foo() ' calls base class method
End Sub
End Class
答案 3 :(得分:0)
您可能希望使用Registry Pattern。
答案 4 :(得分:0)
您要在基类中访问的方法是共享方法吗? 如果是这样,只需使方法受到保护,并在子类中调用它而不使用MyBase关键字。