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

📄 fielddescriptor.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 DEBUGFIELDACCESS = 0#End IfPublic Class FieldDescriptor    Inherits FieldInfo    Implements IMemberDescriptor    Private m_Declaration As IFieldMember    Private m_Parent As ParsedObject    <Diagnostics.Conditional("DEBUGFIELDACCESS")> _        Protected Sub DumpMethodInfo(Optional ByVal ReturnValue As Object = Nothing)#If DEBUGFIELDACCESS Then        Dim m As New Diagnostics.StackFrame(1)        Dim str As String        Dim i As INameable = m_Declaration        Dim name As String = i.FullName        str = " Called: (" & name & "): Field."        If ReturnValue IsNot Nothing Then            i.Compiler.Report.WriteLine(Report.ReportLevels.Debug, str & m.GetMethod.Name & " with return value: " & ReturnValue.ToString)        Else            i.Compiler.Report.WriteLine(Report.ReportLevels.Debug, str & m.GetMethod.Name)        End If#End If    End Sub    ReadOnly Property IsShared() As Boolean Implements IMemberDescriptor.IsShared        Get            Return m_Declaration.IsShared        End Get    End Property    Overridable ReadOnly Property FieldInReflection() As FieldInfo        Get            Return m_Declaration.FieldBuilder        End Get    End Property    Private ReadOnly Property Declaration2() As IMember Implements IMemberDescriptor.Declaration        Get            Return m_Declaration        End Get    End Property    ReadOnly Property Declaration() As IFieldMember        Get            Return m_Declaration        End Get    End Property    ReadOnly Property Compiler() As Compiler        Get            Return m_Parent.Compiler        End Get    End Property    ReadOnly Property Parent() As ParsedObject        Get            Return m_Parent        End Get    End Property    Sub New(ByVal Parent As ParsedObject)        m_Declaration = TryCast(Parent, IFieldMember)        m_Parent = Parent    End Sub    Public Overrides ReadOnly Property Attributes() As System.Reflection.FieldAttributes        Get            Dim result As FieldAttributes            result = m_Declaration.Modifiers.GetFieldAttributeScope(DirectCast(m_Declaration, BaseObject).FindFirstParent(Of TypeDeclaration))            If m_Declaration.Modifiers.Is(ModifierMasks.Static) Then                result = result Or FieldAttributes.SpecialName                If DirectCast(m_Declaration, BaseObject).FindFirstParent(Of IMethod).IsShared Then                    result = result Or FieldAttributes.Static                End If            End If            If m_Declaration.Modifiers.Is(ModifierMasks.Shared) OrElse m_Declaration.IsShared Then                result = result Or FieldAttributes.Static            End If            If TypeOf m_Declaration Is EnumMemberDeclaration Then                result = result Or FieldAttributes.Static Or FieldAttributes.Literal            End If            If TypeOf m_Declaration Is ConstantDeclaration Then                result = result Or FieldAttributes.Static                Helper.Assert(m_Declaration.FieldType IsNot Nothing)                If Helper.CompareType(m_Declaration.FieldType, Compiler.TypeCache.System_Decimal) Then                    result = result Or FieldAttributes.InitOnly                ElseIf Helper.CompareType(m_Declaration.FieldType, Compiler.TypeCache.System_DateTime) Then                    result = result Or FieldAttributes.InitOnly                Else                    result = result Or FieldAttributes.Literal                End If            End If            If m_Declaration.Modifiers.Is(ModifierMasks.ReadOnly) Then                result = result Or FieldAttributes.InitOnly            End If            DumpMethodInfo(result)            Return result        End Get    End Property    Shared ticks As Long    Shared counter As Long    Public Overrides ReadOnly Property DeclaringType() As System.Type        Get            Dim result As Type            If m_Declaration.FieldBuilder IsNot Nothing Then                result = a() 'm_Declaration.FieldBuilder.DeclaringType            Else                Dim startticks As Long = DateTime.Now.Ticks                Dim tickcount As Long                Dim endticks As Long                result = b() 'm_Declaration.FindFirstParent(Of IType).TypeDescriptor                endticks = DateTime.Now.Ticks                tickcount = endticks - startticks                ticks += tickcount                counter += 1                If counter Mod 1000 = 0 Then                    'Compiler.Report.WriteLine(String.Format("FieldDescriptor.DeclaringType, {0} ticks, {1} ms, {2} total ticks, {3} total ms, {4} total s", tickcount, TimeSpan.FromTicks(tickcount).TotalMilliseconds, ticks, TimeSpan.FromTicks(ticks).TotalMilliseconds, TimeSpan.FromTicks(ticks).TotalSeconds))                End If            End If            DumpMethodInfo(result)            Return result        End Get    End Property    Private Function a() As Type        Return m_Declaration.FieldBuilder.DeclaringType    End Function    Private Function b() As Type        Dim obj As BaseObject        obj = DirectCast(m_Declaration, BaseObject)        Return obj.FindFirstParent_IType.TypeDescriptor    End Function    Public Overrides ReadOnly Property FieldHandle() As System.RuntimeFieldHandle        Get            DumpMethodInfo()            Helper.NotImplemented() : Return Nothing        End Get    End Property    Public Overrides ReadOnly Property FieldType() As System.Type        Get            Dim result As Type = m_Declaration.FieldType            DumpMethodInfo(result)            Helper.Assert(result IsNot Nothing)            Return result        End Get    End Property    Public Overloads Overrides Function GetCustomAttributes(ByVal inherit As Boolean) As Object()        DumpMethodInfo()        Helper.NotImplemented() : Return Nothing    End Function    Public Overloads Overrides Function GetCustomAttributes(ByVal attributeType As System.Type, ByVal inherit As Boolean) As Object()        Dim result As Object() = Nothing        DumpMethodInfo(result)        Helper.NotImplemented()        Return result    End Function    Public Overrides Function GetValue(ByVal obj As Object) As Object        DumpMethodInfo()        If obj IsNot Nothing Then Throw New InternalException(Me.Declaration)        If m_Declaration Is Nothing Then Throw New InternalException(Me.Declaration)        Dim emd As EnumMemberDeclaration = TryCast(m_Declaration, EnumMemberDeclaration)        If emd IsNot Nothing Then            Helper.Assert(emd.ConstantValue IsNot Nothing)            Return emd.ConstantValue        End If        Dim cd As ConstantDeclaration = TryCast(m_Declaration, ConstantDeclaration)        If cd IsNot Nothing Then            Helper.Assert(cd.ConstantValue IsNot Nothing)            Return cd.ConstantValue        End If        Helper.NotImplemented() : Return Nothing    End Function    Public Overrides Function IsDefined(ByVal attributeType As System.Type, ByVal inherit As Boolean) As Boolean        DumpMethodInfo()        Helper.NotImplemented() : Return Nothing    End Function    Public Overrides ReadOnly Property Name() As String        Get            DumpMethodInfo()            Return m_Declaration.Name        End Get    End Property    Public Overrides ReadOnly Property ReflectedType() As System.Type        Get            Dim result As Type = DeclaringType            DumpMethodInfo(result)            Return result        End Get    End Property    Public Overloads Overrides Sub SetValue(ByVal obj As Object, ByVal value As Object, ByVal invokeAttr As System.Reflection.BindingFlags, ByVal binder As System.Reflection.Binder, ByVal culture As System.Globalization.CultureInfo)        DumpMethodInfo()        Helper.NotImplemented() ': Return Nothing    End Sub    Public Overrides Function Equals(ByVal obj As Object) As Boolean        DumpMethodInfo()        Helper.NotImplemented() : Return MyBase.Equals(obj)    End Function    Public Overrides Function GetHashCode() As Integer        DumpMethodInfo()        Helper.NotImplemented() : Return MyBase.GetHashCode()    End Function    Public Overrides Function GetOptionalCustomModifiers() As System.Type()        DumpMethodInfo(Type.EmptyTypes)        Return Type.EmptyTypes    End Function    Public Overrides Function GetRawConstantValue() As Object        DumpMethodInfo()        Helper.NotImplemented() : Return MyBase.GetRawConstantValue()    End Function    Public Overrides Function GetRequiredCustomModifiers() As System.Type()        DumpMethodInfo(Type.EmptyTypes)        Return Type.EmptyTypes    End Function    Public Overrides ReadOnly Property MemberType() As System.Reflection.MemberTypes        Get            Dim result As MemberTypes            result = MemberTypes.Field            DumpMethodInfo(result)            Return result        End Get    End Property    Public Overrides ReadOnly Property MetadataToken() As Integer        Get            DumpMethodInfo()            Helper.NotImplemented() : Return MyBase.MetadataToken        End Get    End Property    Public Overrides ReadOnly Property [Module]() As System.Reflection.Module        Get            DumpMethodInfo()            Helper.NotImplemented() : Return MyBase.[Module]        End Get    End Property    Public Overrides Function ToString() As String        DumpMethodInfo()        If m_Declaration.FieldBuilder IsNot Nothing Then            Return m_Declaration.FieldBuilder.ToString        Else            Return MyBase.ToString        End If    End FunctionEnd Class

⌨️ 快捷键说明

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