我需要从后面的代码中调用受保护的Overridable子OnValidatingPassword,但我不能因为告诉我受保护(它是)
有人知道怎么做吗?
或者另一方面......为了实现它,我们是否在此子代码中有代码?
作为一个新的课程。
答案 0 :(得分:1)
Protected
方法只能在定义它的类中调用。这样,Protected
范围与Private
类似。如果要从另一个类调用该方法,则需要将其更改为Public
,或将其包装在另一个Public
方法中。例如:
Public Class MyClassWithProtectedMethod
Protected Overridable Sub MyProtectedMethod()
' ...
End Sub
Public Sub MyPublicMethod()
MyProtectedMethod()
End Sub
End Class
Public Class MyTestClass
Public Sub CallProtectedMethod()
Dim o As New MyClassWithProtectedMethod()
' Fails because method "is not accessible in this context because it is 'Protected'."
o.MyProtectedMethod()
End Sub
Public Sub CallPublicMethod()
Dim o As New MyClassWithProtectedMethod()
' Works
o.MyPublicMethod()
End Sub
End Class
但Private
和Protected
之间的区别在于Protected
成员也可以从派生类访问。因此,如果您无法对原始类进行修改,因为该方法为Protected
,您仍然可以通过派生类公开访问它,如下所示:
Public Class MyClassWithProtectedMethod
Protected Overridable Sub MyProtectedMethod()
' ...
End Sub
End Class
Public Class MyDerivedClass
Inherits MyClassWithProtectedMethod
Public Sub MyPublicMethod()
MyProtectedMethod()
End Sub
End Class
Public Class MyTestClass
Public Sub CallPublicMethod()
Dim o As New MyDerivedClass()
' Works
o.MyPublicMethod()
End Sub
End Class