none
如何编写这样的过程? RRS feed

  • 问题

  • Class1 有过程:

    Private Function AA(O As Objcet) As Boolean

    内容。。。

    End Function

    Class2 有过程:

    Private Function AA(O As Objcet) As Boolean

    内容不一样。。。

    End Function

    Class3 有公用过程:

    Sub XYZ()

    If AA(ccc)=False Then

    ....

    End Sub

    如何在使用调用过程XYZ时,把AA过程也变成公用过程,类似XYZ的参数调用?请教这样的代码怎么写?

    2012年10月29日 14:28

答案

  • 那恐怕你只能用委托,而且如果允许别人手动调用,必须改成public:

    Module Module1
        Public Class A
            Public Function AA(O As Object) As Boolean
                Console.WriteLine("A的AA方法")
                Return True
            End Function
        End Class
    
        Public Class B
            Public Function AA(O As Object) As Boolean
                Console.WriteLine("B的AA方法")
                Return True
            End Function
        End Class
    
        Public Class C
            Public Sub Caller(ByRef cal As Func(Of Object, Boolean), o As Object)
                cal(o)
            End Sub
        End Class
        Sub Main()
            Dim c As New C
            c.Caller(New Func(Of Object, Boolean)(AddressOf New A().AA), Nothing)
        End Sub
    End Module
    以后希望可以一次性说明问题;)

    我的博客园
    慈善点击,点击此处
    和谐拯救危机,全集下载,净化人心

    • 已标记为答案 仁虎 2012年10月30日 6:28
    2012年10月30日 4:46
    版主

全部回复

  • 使用反射。参考此例子(假设是B):

    Module Module1
        Public Class A
            Private Function AA(O As Object) As Boolean
                Console.WriteLine("A的AA方法")
                Return True
            End Function
        End Class
    
        Public Class B
            Private Function AA(O As Object) As Boolean
                Console.WriteLine("B的AA方法")
                Return True
            End Function
        End Class
    
        Sub Main()
            Dim b As New B
            b.GetType().GetMethod("AA", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance).Invoke(b, New Object() {Nothing})
        End Sub
    End Module

    我的博客园
    慈善点击,点击此处
    和谐拯救危机,全集下载,净化人心

    2012年10月30日 1:01
    版主
  •   

    我想实现的是这样的内容:

        Public Class C
            Sub XYZ( ByVal AA ...)'是这个AA,如何把AA变成参数?
                If AA(..)=False Then
                 . ...
            End Sub
        End Class

    调用:

        Public Class A

           Private Function AA(O As Object) As Boolean
                A内容。。。
            End Function

            Private Sub XButton_Click()
                C.XYZ(AA(M)..)
            End Sub

         End Class

         Public Class B

            Private Function AA(O As Object) As Boolean
                B内容。。。
            End Function

            Private Sub YButton_Click()
              C.XYZ(AA(N)..)
            End Sub

         End Class

    如何实现?

    2012年10月30日 4:24
  • 那恐怕你只能用委托,而且如果允许别人手动调用,必须改成public:

    Module Module1
        Public Class A
            Public Function AA(O As Object) As Boolean
                Console.WriteLine("A的AA方法")
                Return True
            End Function
        End Class
    
        Public Class B
            Public Function AA(O As Object) As Boolean
                Console.WriteLine("B的AA方法")
                Return True
            End Function
        End Class
    
        Public Class C
            Public Sub Caller(ByRef cal As Func(Of Object, Boolean), o As Object)
                cal(o)
            End Sub
        End Class
        Sub Main()
            Dim c As New C
            c.Caller(New Func(Of Object, Boolean)(AddressOf New A().AA), Nothing)
        End Sub
    End Module
    以后希望可以一次性说明问题;)

    我的博客园
    慈善点击,点击此处
    和谐拯救危机,全集下载,净化人心

    • 已标记为答案 仁虎 2012年10月30日 6:28
    2012年10月30日 4:46
    版主