我想调用受保护的可覆盖子OnValidatingPassword

时间:2014-01-20 12:01:46

标签: asp.net vb.net asp.net-membership

我需要从后面的代码中调用受保护的Overridable子OnValidatingPassword,但我不能因为告诉我受保护(它是) 有人知道怎么做吗?
或者另一方面......为了实现它,我们是否在此子代码中有代码?
作为一个新的课程。

1 个答案:

答案 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

PrivateProtected之间的区别在于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