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

.net 我可以在共享方法中使用MyBase吗,.net,vb.net,.net,Vb.net,我有一个从基类继承的类(其中包含许多与db相关的常见内容,并标记为MustInherit)。我想编写一个共享方法,在其中调用基类方法,但是编译器会给我消息“MyBase仅在实例方法中有效”。这个共享方法是一种日志记录方法,在应用程序中会被大量使用,我试图避免每次调用对象时都要实例化它 是否可以从共享方法访问基类方法?否,因为编译器声明不能从共享方法调用实例方法 由于一个类的实例与任何其他实例是分开的,当实例方法可以访问该实例的状态时,对该实例上的方法的每次调用都可能产生不同的结果和副作用。共享方

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


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

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

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


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

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

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


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

您可能想看看如何使用。

您可能想看看如何使用。

既然共享方法没有状态,那么从您的想法来看,调用实例方法是不可能的,但是不要dispair在字段级别总是有一个共享的实例化实例,您的共享方法可以引用它,在您的例子中,可能是一个从基继承的私有类

差不多

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

既然一个共享方法没有状态,调用实例方法是不可能的,因为你正在思考,但是不要在字段级别上显示一个共享的实例化实例,你的共享方法可以引用,在你的例子中可能是一个从基继承的私有类

差不多

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

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

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

实际上不需要这样做,因为在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

实际上您不需要这样做,因为您不能在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

这并不完全正确-共享方法没有访问实例状态的权限,但它确实有访问共享状态的权限(例如共享字段)。我同意我的意思是,您的措辞有点不清楚,因为共享状态是状态,但它是该类型的状态,而不是该类型的任何实例。是的,我也同意您的评论,这只是一个解决方案,用于反复创建一个实例,其中某些内容继承自相关的基类。这并不完全正确-共享方法没有访问实例状态的权限,但它有访问共享状态的权限(例如共享字段)。我同意,我的意思是你的措辞有点不清楚,因为共享状态是状态,但它是类型的状态,而不是该类型的任何实例。是的,我也同意你的意见,这只是一个解决方案,解决了反复创建一个实例的问题,以及某些东西继承自相关基类的问题。