⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 genericmethoddescriptor.vb

📁 大名鼎鼎的mono是.NET平台的跨平台(支持linux
💻 VB
📖 第 1 页 / 共 2 页
字号:
            Else                result = m_ClosedType            End If            DumpMethodInfo(result)            Helper.Assert(result IsNot Nothing)            Return result        End Get    End Property    Public Overrides Function GetParameters() As System.Reflection.ParameterInfo()        Static result As ParameterInfo()        If result Is Nothing Then            If m_OpenMethodDescriptor IsNot Nothing Then                result = Helper.GetParameters(Me.Parent.Compiler, m_OpenMethodDescriptor)            Else                result = Helper.GetParameters(Me.Parent.Compiler, m_OpenMethod)            End If            result = Helper.ApplyTypeArguments(Me.Parent, result, m_TypeParameters, m_TypeArguments)        End If        DumpMethodInfo(result)        Return result    End Function    Public Overrides ReadOnly Property MethodInReflection() As System.Reflection.MethodInfo        Get            If m_ClosedMethod Is Nothing Then#If EXTENDEDDEBUG Then                Console.WriteLine("GenericMethodDescriptor.MethodInReflection: " & DeclaringType.FullName & "." & Me.Name)#End If                Try                    If m_ClosedType Is Nothing Then#If EXTENDEDDEBUG Then                        Console.WriteLine(">m_ClosedType = Nothing")#End If                        'Generic method with arguments.                        m_OpenMethod = Helper.GetMethodOrMethodBuilder(m_OpenMethod)                        m_TypeArguments = Helper.GetTypeOrTypeBuilders(m_TypeArguments)                        m_ClosedMethod = m_OpenMethod.MakeGenericMethod(m_TypeArguments)#If EXTENDEDDEBUG Then                        Console.WriteLine(">m_OpenMethod = " & m_OpenMethod.Name)                        Console.WriteLine(">m_TypeArguments.Count = " & m_TypeArguments.Length.ToString)                        Console.WriteLine(">m_ClosedMethod = " & m_ClosedMethod.Name)#End If                    Else#If EXTENDEDDEBUG Then                        Console.WriteLine(">m_ClosedType <> Nothing")#End If                        'Method on a generic type.                        m_ClosedType = Helper.GetTypeOrTypeBuilder(m_ClosedType)                        m_OpenMethod = Helper.GetMethodOrMethodBuilder(m_OpenMethod)                        m_TypeArguments = Helper.GetTypeOrTypeBuilders(m_TypeArguments)#If EXTENDEDDEBUG Then                        Console.WriteLine(">m_ClosedType = " & m_ClosedType.Name)                        Console.WriteLine(">m_ClosedType.GetType = " & m_ClosedType.GetType.FullName)                        Console.WriteLine(">m_OpenMethod = " & m_OpenMethod.Name)                        Console.WriteLine(">m_OpenMethod.GetType = " & m_OpenMethod.GetType.FullName)                        Console.WriteLine(">m_TypeArguments.Count = " & m_TypeArguments.Length.ToString)                        For i As Integer = 0 To m_TypeArguments.Length - 1                            Console.WriteLine(">Arg#" & i.ToString & ".Fullname = " & m_TypeArguments(i).FullName & "; .GetType.Fullname = " & m_TypeArguments(i).GetType.FullName)                        Next#End If                        Dim paramTypes As Type()                        paramTypes = Helper.GetTypes(GetParameters())                        paramTypes = Helper.GetTypeOrTypeBuilders(paramTypes)                        Dim isGetMethod As Boolean = False                        Dim isMakeGenericMethod As Boolean = False                        Dim isTypeBuilderGetMethod As Boolean = False                        Dim isOpenMethod As Boolean = False                        Dim isGetMethodDefinitionAndThenTypeBuilder As Boolean = False                        Dim isMethodOnTypeBuilderInstantiation As Boolean = m_OpenMethod.GetType.Name = "MethodOnTypeBuilderInstantiation" 'OrElse m_OpenMethod.GetType.Name = "MonoMethod"                        Dim isMethodBuilder As Boolean = TypeOf m_OpenMethod Is MethodBuilder                        Dim isMethodBuilderOrInstantiation As Boolean = isMethodBuilder Or isMethodOnTypeBuilderInstantiation                        Dim isTypeInstantiation As Boolean = m_ClosedType.GetType.Name = "TypeBuilderInstantiation" OrElse m_ClosedType.GetType.Name = "MonoGenericClass"                        Dim isTypeBuilder As Boolean = TypeOf m_ClosedType Is TypeBuilder                        Dim isTypeBuilderOrInstantiation As Boolean = isTypeBuilder Or isTypeInstantiation                        Dim methodHasGenericParameters As Boolean = isMethodBuilder = False AndAlso (isMethodOnTypeBuilderInstantiation = False OrElse m_OpenMethod.GetGenericMethodDefinition.GetType.Name <> "MethodBuilder") AndAlso m_OpenMethod.ContainsGenericParameters                        Dim methodIsGeneric As Boolean = m_OpenMethod.IsGenericMethod                        Dim methodIsGenericDefinition As Boolean = m_OpenMethod.IsGenericMethodDefinition                        Dim methodDeclaringTypeIsGenericDefinition As Boolean = m_OpenMethod.DeclaringType.IsGenericTypeDefinition                        Dim typeHasGenericParameters As Boolean = m_ClosedType.ContainsGenericParameters                        Dim typeIsGenericDefinition As Boolean = m_ClosedType.IsGenericTypeDefinition                        Dim typeIsGenericType As Boolean = m_ClosedType.IsGenericType#If EXTENDEDDEBUG Then                        Console.WriteLine(">isMethodOnTypeBuilderInstantiation:     " & isMethodOnTypeBuilderInstantiation)                        Console.WriteLine(">isMethodBuilder:                        " & isMethodBuilder)                        Console.WriteLine(">isMethodBuilderOrInstantiation:         " & isMethodBuilderOrInstantiation)                        Console.WriteLine(">isTypeInstantiation:                    " & isTypeInstantiation)                        Console.WriteLine(">isTypeBuilder:                          " & isTypeBuilder)                        Console.WriteLine(">isTypeBuilderOrInstantiation:           " & isTypeBuilderOrInstantiation)                        Console.WriteLine(">methodHasGenericParameters:             " & methodHasGenericParameters)                        Console.WriteLine(">methodIsGeneric:                        " & methodIsGeneric)                        Console.WriteLine(">methodIsGenericDefinition:              " & methodIsGenericDefinition)                        Console.WriteLine(">methodDeclaringTypeIsGenericDefinition: " & methodDeclaringTypeIsGenericDefinition)                        Console.WriteLine(">typeHasGenericParameters:               " & typeHasGenericParameters)                        Console.WriteLine(">typeIsGenericDefinition:                " & typeIsGenericDefinition)                        Console.WriteLine(">typeIsGenericType:                      " & typeIsGenericType)#End If                        If Helper.IsOnMono AndAlso typeIsGenericType AndAlso methodHasGenericParameters AndAlso methodDeclaringTypeIsGenericDefinition Then#If EXTENDEDDEBUG Then                            Console.WriteLine(">#0")#End If                            isTypeBuilderGetMethod = True                        ElseIf isTypeInstantiation AndAlso typeIsGenericType AndAlso typeIsGenericDefinition = False AndAlso isTypeBuilderOrInstantiation AndAlso methodIsGeneric = False AndAlso methodIsGenericDefinition = False AndAlso methodHasGenericParameters = False AndAlso isMethodOnTypeBuilderInstantiation = False Then#If EXTENDEDDEBUG Then                            Console.WriteLine(">#1")#End If                            isTypeBuilderGetMethod = True                        ElseIf isTypeBuilderOrInstantiation = False Then#If EXTENDEDDEBUG Then                            Console.WriteLine(">#2")#End If                            isGetMethod = True                        ElseIf methodIsGenericDefinition Then#If EXTENDEDDEBUG Then                            Console.WriteLine(">#3")#End If                            isMakeGenericMethod = True                        ElseIf methodIsGeneric Then#If EXTENDEDDEBUG Then                            Console.WriteLine(">#4")#End If                            isGetMethod = True                        ElseIf methodHasGenericParameters AndAlso (typeIsGenericDefinition OrElse (isTypeInstantiation And isMethodOnTypeBuilderInstantiation = False)) Then#If EXTENDEDDEBUG Then                            Console.WriteLine(">#5")#End If                            isTypeBuilderGetMethod = True                        ElseIf Helper.CompareType(m_OpenMethod.DeclaringType, m_ClosedType) = False AndAlso methodHasGenericParameters = True Then#If EXTENDEDDEBUG Then                            Console.WriteLine(">#6")#End If                            isGetMethodDefinitionAndThenTypeBuilder = True                        ElseIf Helper.CompareType(m_OpenMethod.DeclaringType, m_ClosedType) = False AndAlso methodIsGenericDefinition = False Then#If EXTENDEDDEBUG Then                            Console.WriteLine(">#7")#End If                            isGetMethodDefinitionAndThenTypeBuilder = True                        Else#If EXTENDEDDEBUG Then                            Console.WriteLine(">#8")#End If                            isOpenMethod = True                        End If                        Helper.Assert(isGetMethod Xor isMakeGenericMethod Xor isTypeBuilderGetMethod Xor isOpenMethod Xor isGetMethodDefinitionAndThenTypeBuilder)                        If isGetMethod Then#If EXTENDEDDEBUG Then                            Console.WriteLine(">isGetMethod")#End If                            m_ClosedMethod = m_ClosedType.GetMethod(m_OpenMethod.Name, BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance, Nothing, CallingConventions.Standard, paramTypes, Nothing)                        ElseIf isOpenMethod Then#If EXTENDEDDEBUG Then                            Console.WriteLine(">isOpenMethod")#End If                            m_ClosedMethod = m_OpenMethod                        ElseIf isMakeGenericMethod Then#If EXTENDEDDEBUG Then                            Console.WriteLine(">isMakeGenericMethod")#End If                            m_ClosedMethod = m_OpenMethod.MakeGenericMethod(m_TypeArguments)                        ElseIf isTypeBuilderGetMethod Then#If EXTENDEDDEBUG Then                            Console.WriteLine(">isTypeBuilderGetMethod")#End If                            m_ClosedMethod = TypeBuilder.GetMethod(m_ClosedType, m_OpenMethod)                        ElseIf isGetMethodDefinitionAndThenTypeBuilder Then#If EXTENDEDDEBUG Then                            Console.WriteLine(">isGetMethodDefinitionAndThenTypeBuilder")#End If                            m_ClosedMethod = TypeBuilder.GetMethod(m_ClosedType, m_OpenMethod.GetGenericMethodDefinition)                        Else                            Helper.NotImplemented()                        End If                    End If                    Compiler.TypeManager.RegisterReflectionMember(m_ClosedMethod, Me)                Catch ex As Exception                    Parent.Compiler.ShowExceptionInfo(ex)                    Helper.StopIfDebugging()                    Throw                End Try            End If            Helper.Assert(m_ClosedMethod IsNot Nothing)            Return m_ClosedMethod        End Get    End PropertyEnd Class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -