2013-02-12 2 views
2

Могу ли я сделать указатель на функцию экземпляра, когда еще не объявлен экземпляр? Прямо сейчас я использую рефлексию для вызова своих методов, но, похоже, это проще с делегатом. Я просто не могу понять. Методы, которые я буду вызывать, всегда будут возвращать один и тот же тип и не будут иметь никаких параметров.. Указатель функции экземпляра.

Вот некоторые примеры кода, чтобы проиллюстрировать то, что я пытаюсь сделать:

Private Shared Function A() As Object 

    Return Lauch(????) ' should call FunctionA of the instance (undeclared here) 

End Function 


Private Shared Function B() As Object 

    Return Lauch(????) ' should call FunctionB of the instance (undeclared here) 

End Function 


Private Shared Function Lauch(Of T)(ByVal instanceFunc As Func(Of T)) As Object 

    ' long and repetitive operations that I don't want to repeat in function A and B 

    Dim myInstance As New MyClass() 

    Return myInstance.instanceFunc() 

End Function 

Прямо сейчас я делаю что-то вроде следующего, и она работает, но я чувствую, что должен быть лучший способ:

Private Shared Function A() As Object 

    Return Lauch("FunctionA") 

End Function 


Private Shared Function B() As Object 

    Return Lauch("FunctionB") 

End Function 


Private Shared Function Lauch(ByVal instanceFunc As String) As Object 

    ' long and repetitive operations that I don't want to repeat in function A and B 

    Dim myInstance As New MyClass() 

    Return myInstance.GetType().GetMethod(instanceFunc).Invoke(myInstance, Nothing)) 

End Function 

ответ

1

Что относительно этого?

Private Shared Function A() As Object 
    Return Lauch(Function(x) x.A()) 
End Function 


Private Shared Function Lauch(ByVal instanceFunc As Func(Of CustomClass, Object)) As Object 
    ' long and repetitive operations 
    Dim myInstance As New CustomClass() 
    Return instanceFunc(myInstance) 
End Function 

В принципе, можно определить функцию, которая определяет результат Lauch функции. Это функция, которая принимает CustomClass и возвращает Object. В методе A вы определяете эту функцию, чтобы вернуть результат функции A экземпляра.

+0

Я бы никогда не придумал это! Спасибо, мне придется отлаживать это еще раз, чтобы действительно понять, что там происходит. – ChG

Смежные вопросы