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

📄 typedescriptor.vb

📁 大名鼎鼎的mono是.NET平台的跨平台(支持linux
💻 VB
📖 第 1 页 / 共 3 页
字号:
        Helper.Assert(members IsNot Nothing)        Helper.Assert(members.Count = 1)        Helper.Assert(TypeOf members(0) Is IFieldMember)        result = DirectCast(members(0), IFieldMember).FieldDescriptor        DumpMethodInfo(result)        Return result    End Function    Public Overloads Overrides Function GetFields(ByVal bindingAttr As System.Reflection.BindingFlags) As System.Reflection.FieldInfo()        DumpMethodInfo()        Helper.NotImplemented() : Return Nothing    End Function    Public Overloads Overrides Function GetInterface(ByVal name As String, ByVal ignoreCase As Boolean) As System.Type        DumpMethodInfo()        Helper.NotImplemented() : Return Nothing    End Function    Public Overrides Function GetInterfaces() As System.Type()        Dim result As New Generic.List(Of Type)        Dim tmp As Type()        Helper.Assert(m_Declaration IsNot Nothing)        tmp = m_Declaration.ImplementedTypes        If tmp IsNot Nothing Then result.AddRange(m_Declaration.ImplementedTypes)        If Me.BaseType IsNot Nothing Then            result.AddRange(Compiler.TypeManager.GetRegisteredType(Me.BaseType).GetInterfaces)        End If        For i As Integer = 0 To result.Count - 1            tmp = Compiler.TypeManager.GetRegisteredType(result(i)).GetInterfaces            For Each iface As Type In tmp                If result.Contains(iface) = False Then result.Add(iface)            Next        Next        DumpMethodInfo(result.ToArray)        Return result.ToArray    End Function    Function Filter(ByVal members As Generic.IEnumerable(Of IConstructorMember), ByVal bindingAttr As BindingFlags) As Generic.List(Of ConstructorInfo)        DumpMethodInfo()        Dim result As New Generic.List(Of ConstructorInfo)        For Each member As IConstructorMember In members            If IsMatch(member, bindingAttr) Then result.Add(member.ConstructorDescriptor)        Next        Return result    End Function    Function Filter(ByVal members As Generic.IEnumerable(Of MemberInfo), ByVal bindingAttr As BindingFlags) As Generic.List(Of MemberInfo)        Dim result As New Generic.List(Of MemberInfo)        Helper.Assert(members IsNot Nothing)        For Each member As MemberInfo In members            If IsMatch(member, bindingAttr) Then result.Add(member)        Next        DumpMethodInfo(result)        Return result    End Function    Private Function Filter(ByVal members As Generic.IEnumerable(Of IMember), ByVal bindingAttr As BindingFlags) As Generic.List(Of MemberInfo)        DumpMethodInfo()        Dim result As New Generic.List(Of MemberInfo)        For Each member As IMember In members            If IsMatch(member, bindingAttr) Then result.Add(member.MemberDescriptor)        Next        Return result    End Function    Private Function IsMatch(ByVal member As IMember, ByVal bindingAttr As BindingFlags) As Boolean        DumpMethodInfo()        Dim result As Boolean = False        If CBool(bindingAttr And BindingFlags.Public) Then            If member.Modifiers.IsPublic Then result = True        End If        If CBool(bindingAttr And BindingFlags.NonPublic) Then            If member.Modifiers.IsPublic = False Then result = True        End If        If member.IsShared Then            If CBool(bindingAttr And BindingFlags.Static) = False Then result = False        Else            If CBool(bindingAttr And BindingFlags.Instance) = False Then result = False        End If#If DEBUG Then        Dim tmp As BindingFlags = (Not (BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.Static)) And bindingAttr        If CInt(tmp) > 0 Then            Helper.NotImplemented("bindingAttr has some value not checked for: " & tmp.ToString)        End If#End If        Return result    End Function    Private Function IsMatch(ByVal member As MemberInfo, ByVal bindingAttr As BindingFlags) As Boolean        Dim result As Boolean = True        Dim includePublic As Boolean = CBool(bindingAttr And BindingFlags.Public)        Dim includeNonPublic As Boolean = CBool(bindingAttr And BindingFlags.NonPublic)        Dim includeStatic As Boolean = CBool(bindingAttr And BindingFlags.Static)        Dim includeInstance As Boolean = CBool(bindingAttr And BindingFlags.Instance)        Dim includeFlattenedHierarchy As Boolean = CBool(bindingAttr And BindingFlags.FlattenHierarchy)        Dim onlyDeclared As Boolean = CBool(bindingAttr And BindingFlags.DeclaredOnly)        If onlyDeclared AndAlso (Helper.CompareType(member.DeclaringType, Me) = False AndAlso (Me.IsGenericType AndAlso Me.IsGenericTypeDefinition = False AndAlso member.DeclaringType.IsGenericTypeDefinition AndAlso Helper.CompareType(member.DeclaringType, Me.GetGenericTypeDefinition)) = False) Then            Return False        End If        If Helper.IsPublic(member) Then            If includePublic = False Then result = False        Else            If includeNonPublic = False Then                result = False            End If        End If        If Helper.IsShared(member) Then            If includeStatic = False Then result = False        Else            If includeInstance = False Then result = False        End If        If includeFlattenedHierarchy Then#If EXTENDEDDEBUG Then            Helper.NotImplementedYet("bindingAttr has some value not checked for: " & BindingFlags.FlattenHierarchy.ToString)#End If        End If#If DEBUG Then        Dim tmp As BindingFlags = (Not (BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.Static Or BindingFlags.FlattenHierarchy Or BindingFlags.DeclaredOnly)) And bindingAttr        If CInt(tmp) > 0 Then            Helper.NotImplementedYet("bindingAttr has some value not checked for: " & tmp.ToString)        End If#End If        Return result    End Function    Protected Overridable ReadOnly Property AllDeclaredMembers() As Generic.List(Of MemberInfo)        Get            If m_AllDeclaredMembers Is Nothing Then                Helper.Assert(m_Declaration IsNot Nothing)                Helper.Assert(m_Declaration.Members IsNot Nothing)                m_AllDeclaredMembers = m_Declaration.Members.MemberDeclarations            End If            Return m_AllDeclaredMembers        End Get    End Property    Protected Overridable ReadOnly Property AllMembers() As Generic.List(Of MemberInfo)        Get            If m_AllMembers Is Nothing Then                Helper.Assert(m_Declaration IsNot Nothing)                Helper.Assert(m_Declaration.Members IsNot Nothing)                m_AllMembers = m_Declaration.Members.MemberDeclarations                Helper.AddMembers(Compiler, Me, m_AllMembers, Helper.GetBaseMembers(Compiler, Me))            End If            Return m_AllMembers        End Get    End Property    Private Overloads Function GetMembers(Of T)(ByVal MemberType As MemberTypes, ByVal bindingAttr As System.Reflection.BindingFlags) As Generic.List(Of T)        Dim result As Generic.List(Of T)        Dim candidates As Generic.List(Of MemberInfo)        If (bindingAttr And BindingFlags.DeclaredOnly) = 0 Then            Helper.NotImplementedYet("Get* should not be called without DeclaredOnly, if base members are needed call Compiler.TypeManager.GetCache(type).FlattenedMembers")            candidates = AllMembers        Else            candidates = AllDeclaredMembers        End If        result = New Generic.List(Of T)(candidates.Count)        For i As Integer = 0 To candidates.Count - 1            Dim member As MemberInfo            member = candidates(i)            If member.MemberType <> MemberType Then Continue For            If IsMatch(member, bindingAttr) = False Then Continue For            result.Add(DirectCast(CObj(member), T))        Next        Return result    End Function    Public Overloads Overrides Function GetMembers(ByVal bindingAttr As System.Reflection.BindingFlags) As System.Reflection.MemberInfo()        Dim result As New Generic.List(Of MemberInfo)        result = New Generic.List(Of MemberInfo)        If (bindingAttr And BindingFlags.DeclaredOnly) = 0 Then            Helper.NotImplementedYet("Get* should not be called without DeclaredOnly, if base members are needed call Compiler.TypeManager.GetCache(type).FlattenedMembers")            result.AddRange(Filter(AllMembers, bindingAttr).ToArray)        Else            result.AddRange(Filter(AllDeclaredMembers, bindingAttr).ToArray)        End If        DumpMethodInfo(result.ToArray)        Return result.ToArray    End Function    Protected Overrides Function GetMethodImpl(ByVal name As String, ByVal bindingAttr As System.Reflection.BindingFlags, ByVal binder As System.Reflection.Binder, ByVal callConvention As System.Reflection.CallingConventions, ByVal types() As System.Type, ByVal modifiers() As System.Reflection.ParameterModifier) As System.Reflection.MethodInfo        Dim result As MethodInfo = Nothing        Dim allMembers As New Generic.List(Of MemberInfo)        allMembers.AddRange(Me.GetMembers(bindingAttr))        allMembers = Helper.FilterByName2(allMembers, name)        If types IsNot Nothing Then            For Each m As MemberInfo In allMembers                Dim mi As MethodInfo = TryCast(m, MethodInfo)                If mi IsNot Nothing AndAlso TypeResolution.CompareTypes(Helper.GetTypes(Helper.GetParameters(Compiler, mi)), types) Then                    result = mi                    Exit For                End If            Next        ElseIf allMembers.Count = 1 Then            result = TryCast(allMembers(0), MethodInfo)        Else            Helper.NotImplemented()        End If        DumpMethodInfo(result)        Return result    End Function    Public Overloads Overrides Function GetMethods(ByVal bindingAttr As System.Reflection.BindingFlags) As System.Reflection.MethodInfo()        Dim result As New Generic.List(Of MethodInfo)        Dim tmp As Generic.List(Of IMethod)        tmp = m_Declaration.Members.GetSpecificMembers(Of IMethod)()        For Each item As IMethod In tmp            Dim inf As MethodInfo = TryCast(item.MethodDescriptor, MethodInfo)            If inf IsNot Nothing Then                result.Add(inf)            End If        Next        DumpMethodInfo(result.ToArray)        Return result.ToArray    End Function    Public Overloads Overrides Function GetNestedType(ByVal name As String, ByVal bindingAttr As System.Reflection.BindingFlags) As System.Type        Dim result As Type = Nothing        Dim candidates As Type() = GetNestedTypes(bindingAttr)        For Each candidate As Type In candidates            If IsMatch(candidate, name, bindingAttr) Then                Helper.Assert(result Is Nothing) 'Only one result should be found.                result = candidate#If Not DEBUG Then                exit for#End If            End If        Next        DumpMethodInfo(result)        Return result    End Function    Public Overloads Overrides Function GetNestedTypes(ByVal bindingAttr As System.Reflection.BindingFlags) As System.Type()        Dim result As New Generic.List(Of Type)        For Each candidate As TypeDeclaration In m_Declaration.Members.GetSpecificMembers(Of TypeDeclaration)()            If IsMatch(candidate.TypeDescriptor, Nothing, bindingAttr) Then result.Add(candidate.TypeDescriptor)        Next        DumpMethodInfo(result.ToArray)        Return result.ToArray    End Function    Private Function IsMatch(ByVal Type As Type, ByVal SearchedName As String, ByVal bindingAttr As BindingFlags) As Boolean        'The following BindingFlags filter flags can be used to define which nested types to include in the search:         '- You must specify either BindingFlags.Instance or BindingFlags.Static in order to get a return.        '- Specify BindingFlags.Public to include public nested types in the search.        '- Specify BindingFlags.NonPublic to include non-public nested types (that is, private and protected members) in the search.        '- Specify BindingFlags.FlattenHierarchy to include static nested types up the hierarchy.        'The following BindingFlags modifier flags can be used to change how the search works:         '- BindingFlags.IgnoreCase to ignore the case of name.        '- BindingFlags.DeclaredOnly to search only the nested types declared on the Type, not nested types that were simply inherited.        'NOTES:         '- What is a static nested type?        '- BindingFlags.FlattenHierarchy's info says nested types are NOT returned.        '- Could not get the runtimetype to return any inherited nested types, so we are not looking for them eiter.        If CBool(bindingAttr And (BindingFlags.Instance Or BindingFlags.Static)) = False Then Return False        If Type.IsNotPublic OrElse Type.IsNestedPublic = False Then            If CBool(bindingAttr And BindingFlags.NonPublic) = False Then Return False        ElseIf Type.IsPublic OrElse Type.IsNestedPublic Then            If CBool(bindingAttr And BindingFlags.Public) = False Then Return False        End If        If SearchedName IsNot Nothing Then            If NameResolution.CompareName(Type.Name, SearchedName, Not CBool(bindingAttr And BindingFlags.IgnoreCase)) = False Then Return False        End If        Return True    End Function    Public Overloads Overrides Function GetProperties(ByVal bindingAttr As System.Reflection.BindingFlags) As System.Reflection.PropertyInfo()        DumpMethodInfo()        Helper.NotImplemented() : Return Nothing    End Function    Protected Overrides Function GetPropertyImpl(ByVal name As String, ByVal bindingAttr As System.Reflection.BindingFlags, ByVal binder As System.Reflection.Binder, ByVal returnType As System.Type, ByVal types() As System.Type, ByVal modifiers() As System.Reflection.ParameterModifier) As System.Reflection.PropertyInfo        Dim result As PropertyInfo = Nothing        Dim tmp As New Generic.List(Of MemberInfo)        tmp.AddRange(Me.GetMembers(bindingAttr))        For Each p As MemberInfo In tmp            If p.MemberType = MemberTypes.Property AndAlso NameResolution.CompareName(p.Name, name) Then                Helper.Assert(result Is Nothing)                result = DirectCast(p, PropertyInfo)            End If        Next        DumpMethodInfo(result)        Return result    End Function    Public Overrides ReadOnly Property GUID() As System.Guid        Get            DumpMethodInfo()            Helper.NotImplemented() : Return Nothing        End Get    End Property    Protected Overrides Function HasElementTypeImpl() As Boolean        Dim result As Boolean        Helper.NotImplemented()        DumpMethodInfo(result)        Return result    End Function    Public Overloads Overrides Function InvokeMember(ByVal name As String, ByVal invokeAttr As System.Reflection.BindingFlags, ByVal binder As System.Reflection.Binder, ByVal target As Object, ByVal args() As Object, ByVal modifiers() As System.Reflection.ParameterModifier, ByVal culture As System.Globalization.CultureInfo, ByVal namedParameters() As String) As Object        DumpMethodInfo()        Helper.NotImplemented() : Return Nothing    End Function    Protected Overrides Function IsArrayImpl() As Boolean        Dim result As Boolean = False        DumpMethodInfo(result)        Return result    End Function    Protected Overrides Function IsByRefImpl() As Boolean        Dim result As Boolean = False        DumpMethodInfo(result)        Return result    End Function    Protected Overrides Function IsCOMObjectImpl() As Boolean        DumpMethodInfo()        Helper.NotImplemented()    End Function    Public Overrides Function IsDefined(ByVal attributeType As System.Type, ByVal inherit As Boolean) As Boolean        DumpMethodInfo()        Helper.NotImplemented()    End Function    Protected Overrides Function IsPointerImpl() As Boolean        Dim result As Boolean = False        DumpMethodInfo(result)        Return result    End Function    Protected Overrides Function IsPrimitiveImpl() As Boolean        Dim result As Boolean = False        DumpMethodInfo(result)        Return result    End Function    Public Overrides ReadOnly Property [Module]() As System.Reflection.Module

⌨️ 快捷键说明

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