You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Darwinism/Parallel/IpcParallel/IDelegate.vb

72 lines
2.1 KiB

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
''' <summary>
''' the absolute path of the assembly module file that contains target delegate
''' </summary>
''' <returns></returns>
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