Imports System.Reflection Imports Microsoft.VisualBasic.Scripting.SymbolBuilder #If netcore5 = 1 Then Imports Microsoft.VisualBasic.ApplicationServices.Development.NetCore5 #End If Imports TypeInfo = Microsoft.VisualBasic.Scripting.MetaData.TypeInfo Public Class IDelegate Public Property name As String Public Property type As TypeInfo ''' ''' the absolute path of the assembly module file that contains target delegate ''' ''' Public Property filepath As String Sub New() End Sub Sub New(target As MethodInfo) type = New TypeInfo(target.DeclaringType) name = target.Name filepath = target.DeclaringType.Assembly.Location End Sub Sub New(target As [Delegate]) Call Me.New(target.Method) End Sub Public Function GetMethodTarget() As Object Dim type As Type = provideType() If VBLanguage.IsValidVBSymbolName(name) Then Return Nothing Else Return Activator.CreateInstance(type) End If End Function Private Function provideType() As Type Return type.GetType(knownFirst:=True, searchPath:={filepath}) End Function Public Function GetMethod() As MethodInfo Dim type As Type = provideType() #If netcore5 = 1 Then Call deps.TryHandleNetCore5AssemblyBugs(package:=type) #End If If Not VBLanguage.IsValidVBSymbolName(name) Then For Each method As MethodInfo In CType(type, System.Reflection.TypeInfo).DeclaredMethods If (Not method.IsStatic) AndAlso method.Name = name Then Return method End If Next Else For Each method As MethodInfo In CType(type, System.Reflection.TypeInfo).DeclaredMethods If method.IsStatic AndAlso method.Name = name Then Return method End If Next End If Return Nothing End Function Public Overrides Function ToString() As String Return $"{type}::{name}" End Function End Class