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

📄 propertyaccessclassification.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' Imports System.Reflection''' <summary>''' Every property access has an associated type, namely the type of the''' property. A property access may have an associated instance expression.''' ''' •	A property access can be reclassified as a value. The property access ''' expression is interpreted as an invocation expression of the Get accessor ''' of the property. If the property has no getter, then a compile-time error occurs.''' </summary>''' <remarks></remarks>Public Class PropertyAccessClassification    Inherits ExpressionClassification    Private m_LateBoundExpression As LateBoundAccessToPropertyAccessExpression    Private m_InstanceExpression As Expression    Private m_Parameters As ArgumentList    Private m_Property As Reflection.PropertyInfo    Private m_Classification As PropertyGroupClassification    Public Overrides ReadOnly Property IsConstant() As Boolean        Get            Return False        End Get    End Property    ReadOnly Property Parameters() As ArgumentList        Get            If m_Parameters Is Nothing AndAlso m_Classification IsNot Nothing Then                m_Parameters = m_Classification.Parameters            End If            Return m_Parameters        End Get    End Property    ReadOnly Property ResolvedProperty() As PropertyInfo        Get            Return m_Property        End Get    End Property    Friend Overrides Function GenerateCode(ByVal Info As EmitInfo) As Boolean        Dim result As Boolean = True        Dim method As MethodInfo        If m_LateBoundExpression IsNot Nothing Then Return m_LateBoundExpression.GenerateCode(Info)        Dim rside As EmitInfo        rside = Info.Clone(True)        If m_Classification IsNot Nothing Then            m_InstanceExpression = m_Classification.InstanceExpression            m_Property = m_Classification.ResolvedProperty            m_Parameters = m_Classification.Parameters        End If        Helper.Assert(m_Property IsNot Nothing)        If Info.IsLHS Then            method = m_Property.GetSetMethod(True)        Else            method = m_Property.GetGetMethod(True)        End If        'If m_InstanceExpression IsNot Nothing Then        '    rside = rside.Clone(m_Property.DeclaringType)        '    result = m_InstanceExpression.GenerateCode(rside) AndAlso result        'End If        Dim exp As Expression()        Dim args As ArgumentList        Dim expCount As Integer        If m_Parameters IsNot Nothing Then            expCount = m_Parameters.Count        End If        If Info.IsLHS Then            expCount += 1        End If        ReDim exp(expCount - 1)        If m_Parameters IsNot Nothing Then            'Dim params() As ParameterInfo = Helper.GetParameters(Compiler, method)            'If Info.IsLHS Then            '    'Remove the last parameter, it is a setter.            '    Helper.Assert(params.GetUpperBound(0) >= 0)            '    Dim tmpParameters As ParameterInfo()            '    ReDim tmpParameters(params.GetUpperBound(0) - 1)            '    Array.Copy(params, tmpParameters, tmpParameters.Length)            '    params = tmpParameters            'End If            'result = m_Parameters.GenerateCode(rside, params) AndAlso result            For i As Integer = 0 To m_Parameters.Count - 1                exp(i) = m_Parameters(i).Expression            Next        End If        If Info.IsLHS Then            ' rside = rside.Clone(m_Property.PropertyType)            'result = Info.RHSExpression.GenerateCode(rside) AndAlso result            exp(expCount - 1) = Info.RHSExpression        End If        'Emitter.EmitCallOrCallVirt(Info, method)        args = New ArgumentList(Me.Parent, exp)        Helper.EmitArgumentsAndCallOrCallVirt(Info, m_InstanceExpression, args, method)        Return result    End Function    <Obsolete()> Overloads Function ReclassifyToValue() As ValueClassification        Return New ValueClassification(Me)    End Function    ReadOnly Property InstanceExpression() As Expression        Get            If m_InstanceExpression Is Nothing AndAlso m_Classification IsNot Nothing Then                m_InstanceExpression = m_Classification.InstanceExpression            End If            Return m_InstanceExpression        End Get    End Property    Property [Property]() As Reflection.PropertyInfo        Get            Return m_Property        End Get        Set(ByVal value As Reflection.PropertyInfo)            m_Property = value        End Set    End Property    ReadOnly Property Type() As Type        Get            If m_Property Is Nothing Then                Helper.Assert(m_Classification IsNot Nothing)                Helper.Assert(m_Classification.IsResolved)                m_Property = m_Classification.ResolvedProperty            End If            Helper.Assert(m_Property IsNot Nothing)            Return m_Property.PropertyType        End Get    End Property    Sub New(ByVal Parent As ParsedObject, ByVal [Property] As Reflection.PropertyInfo, ByVal InstanceExpression As Expression, ByVal Parameters As ArgumentList)        MyBase.New(Classifications.PropertyAccess, Parent)        m_Property = [Property]        m_InstanceExpression = InstanceExpression        m_Parameters = Parameters    End Sub    Sub New(ByVal Classification As PropertyGroupClassification)        MyBase.New(Classifications.PropertyAccess, Classification.Parent)        m_Classification = Classification    End Sub    Sub New(ByVal Expression As LateBoundAccessToPropertyAccessExpression)        MyBase.New(Classifications.PropertyAccess, Expression.Parent)        m_LateBoundExpression = Expression    End SubEnd Class

⌨️ 快捷键说明

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