代码之家  ›  专栏  ›  技术社区  ›  Simon

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

  •  0
  • Simon  · 技术社区  · 15 年前

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

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

    5 回复  |  直到 13 年前
        1
  •  3
  •   Andrew Hare    15 年前

    不,因为编译器声明不能从共享方法调用实例方法。

    由于类的实例与任何其他实例都是独立的,因此对该实例上的方法的每个调用都可能产生不同的结果和副作用,因为实例方法可以访问该实例的 状态 . 共享方法无权访问任何实例的状态,因为共享方法在该类型的所有实例之间共享。

    因为这种情况下,不可能从共享方法调用实例方法,因为共享方法是“无实例”的。

        2
  •  1
  •   almog.ori    15 年前

    既然一个共享方法没有状态,那么在你重新思考的时候调用一个实例方法是不可能的,但是不要反悔,在你的共享方法可以引用的字段级总是有一个共享的实例化实例,在你的情况下,它可以是一个从你的基础继承的私有类。

    类似的东西

    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
    
        3
  •  1
  •   catbert    15 年前

    实际上不需要这样做,因为在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
    
        4
  •  0
  •   Patrick McDonald    15 年前

    您可能希望使用 Registry Pattern .

        5
  •  0
  •   Jules    15 年前

    要在基类中访问的方法是共享方法吗? 如果是这样,只需使方法受保护,并且在您的子类中,不使用mybase关键字来调用它。