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

📄 memberimplementsclause.vb

📁 大名鼎鼎的mono是.NET平台的跨平台(支持linux
💻 VB
字号:
' ' Visual Basic.Net Compiler' Copyright (C) 2004 - 2007 Rolf Bjarne Kvinge, RKvinge@novell.com' ' This library is free software; you can redistribute it and/or' modify it under the terms of the GNU Lesser General Public' License as published by the Free Software Foundation; either' version 2.1 of the License, or (at your option) any later version.' ' This library is distributed in the hope that it will be useful,' but WITHOUT ANY WARRANTY; without even the implied warranty of' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU' Lesser General Public License for more details.' ' You should have received a copy of the GNU Lesser General Public' License along with this library; if not, write to the Free Software' Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA' #If DEBUG Then#Const EXTENDEDDEBUG = 0#Const VERYEXTENDEDDEBUG = 0#End If''' <summary>''' ImplementsClause  ::=  "Implements" ImplementsList''' </summary>''' <remarks></remarks>Public Class MemberImplementsClause    Inherits ParsedObject    Private m_ImplementsList As MemberImplementsList    Sub New(ByVal Parent As ParsedObject)        MyBase.New(Parent)    End Sub    Sub Init(ByVal ImplementsList As MemberImplementsList)        m_ImplementsList = ImplementsList    End Sub    Function DefineImplements(ByVal Declaration As EventDeclaration) As Boolean        Dim result As Boolean = True        Dim declType As TypeBuilder        Helper.Assert(Declaration IsNot Nothing)        declType = Declaration.DeclaringType.TypeBuilder        For i As Integer = 0 To m_ImplementsList.Count - 1            Dim ispec As InterfaceMemberSpecifier = m_ImplementsList(i)            Dim eventI As EventInfo            eventI = ispec.ResolvedEventInfo            Helper.Assert(eventI IsNot Nothing)            Dim addMethodI, removeMethodI, raiseMethodI As MethodInfo            Dim addMethod, removeMethod, raiseMethod As MethodInfo            addMethodI = Helper.GetMethodOrMethodBuilder(eventI.GetAddMethod(True))            removeMethodI = Helper.GetMethodOrMethodBuilder((eventI.GetRemoveMethod(True)))            raiseMethodI = Helper.GetMethodOrMethodBuilder(eventI.GetRaiseMethod(True))            addMethod = Helper.GetMethodOrMethodBuilder(Declaration.GetAddMethod(True))            removeMethod = Helper.GetMethodOrMethodBuilder(Declaration.GetRemoveMethod(True))            raiseMethod = Helper.GetMethodOrMethodBuilder(Declaration.GetRaiseMethod(True))            Helper.Assert((addMethodI Is Nothing Xor addMethod Is Nothing) = False)            Helper.Assert((removeMethodI Is Nothing Xor removeMethod Is Nothing) = False)            Helper.Assert((raiseMethodI Is Nothing Xor raiseMethod Is Nothing) = False)            If addMethod IsNot Nothing AndAlso addMethodI IsNot Nothing Then                declType.DefineMethodOverride(addMethod, addMethodI)            End If            If removeMethod IsNot Nothing AndAlso removeMethodI IsNot Nothing Then                declType.DefineMethodOverride(removeMethod, removeMethodI)            End If            If raiseMethod IsNot Nothing AndAlso raiseMethodI IsNot Nothing Then                declType.DefineMethodOverride(raiseMethod, raiseMethodI)            End If        Next        Return result    End Function    Function DefineImplements(ByVal Builder As TypeBuilder, ByVal Method As MethodBuilder) As Boolean        Dim result As Boolean = True        Helper.Assert(Builder IsNot Nothing)        Helper.Assert(Method IsNot Nothing)        For i As Integer = 0 To m_ImplementsList.Count - 1            Dim ispec As InterfaceMemberSpecifier = Me.m_ImplementsList(i)            Dim methodI As MethodInfo            Dim propertyI As PropertyInfo            methodI = Helper.GetMethodOrMethodBuilder(ispec.ResolvedMethodInfo)            propertyI = Helper.GetPropertyOrPropertyBuilder(ispec.ResolvedPropertyInfo)            Helper.Assert(propertyI Is Nothing Xor methodI Is Nothing)            If propertyI IsNot Nothing Then                'This is be a property                If Method.Name.StartsWith("get_") Then                    methodI = propertyI.GetGetMethod(True)                ElseIf Method.Name.StartsWith("set_") Then                    methodI = propertyI.GetSetMethod(True)                Else                    Helper.NotImplemented()                End If                methodI = Helper.GetMethodOrMethodBuilder(methodI)            End If            Helper.Assert(methodI IsNot Nothing)            Builder.DefineMethodOverride(Method, methodI)#If EXTENDEDDEBUG Then            Compiler.Report.WriteLine(vbnc.Report.ReportLevels.Debug, "Defined method override '" & Builder.FullName & ":" & Method.Name & "' overrides or implements '" & methodI.DeclaringType.FullName & ":" & methodI.Name & "'")#End If#If VERYEXTENDEDDEBUG Then            Compiler.Report.WriteLine(">Builder.GetType=" & Builder.GetType.FullName)            Compiler.Report.WriteLine(">Builder.IsGenericType=" & Builder.IsGenericType.ToString)            Compiler.Report.WriteLine(">Builder.IsGenericTypeDefinition=" & Builder.IsGenericTypeDefinition.ToString)            Compiler.Report.WriteLine(">Builder.IsGenericParameter=" & Builder.IsGenericParameter.ToString)            Compiler.Report.WriteLine(">Builder.ContainsGenericParameters=" & Builder.ContainsGenericParameters.ToString)            Compiler.Report.WriteLine(">Method.GetType=" & Method.GetType.FullName)            Compiler.Report.WriteLine(">MethodI.GetType=" & methodI.GetType.FullName)            Compiler.Report.WriteLine(">MethodI.DeclaringType.GetType=" & methodI.DeclaringType.GetType.FullName)            'Compiler.Report.WriteLine(">Builder.GetGenericArguments() (0).FullName=" & Builder.GetGenericArguments()(0).Name)#End If        Next        Return result    End Function    ReadOnly Property ImplementsList() As MemberImplementsList        Get            Return m_ImplementsList        End Get    End Property    Public Overrides Function ResolveCode(ByVal Info As ResolveInfo) As Boolean        Return m_ImplementsList.ResolveCode(Info)    End Function    Public Overrides Function ResolveTypeReferences() As Boolean        Return m_ImplementsList.ResolveTypeReferences    End Function    Shared Function IsMe(ByVal tm As tm) As Boolean        Return tm.CurrentToken = KS.Implements    End FunctionEnd Class

⌨️ 快捷键说明

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