我可以在共享方法中使用MyBase吗?

时间:2009-07-07 12:57:31

标签: .net vb.net

我有一个继承自基类的类(这包含许多常见的数据库相关内容,并标记为MustInherit)。我想编写一个共享方法,在其中我调用基类方法,但编译器给我的消息'MyBase仅在实例方法中有效'。这个共享方法是一种日志记录方法,将在应用程序中大量使用,我试图避免每次要调用它时都必须实例化一个对象。

是否可以从共享方法访问基类方法?

5 个答案:

答案 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关键字。