ExpressionBuilder 클래스

정의

페이지 구문 분석 중에 식을 계산합니다.

public ref class ExpressionBuilder abstract
public abstract class ExpressionBuilder
type ExpressionBuilder = class
Public MustInherit Class ExpressionBuilder
상속
ExpressionBuilder
파생

예제

다음 코드 예제를 구현 하 여 사용자 지정 식 작성기를 빌드하는 방법을 보여 줍니다는 ExpressionBuilder 추상 클래스입니다. 이 구현의 ExpressionBuilder 식에 전달 되는 계산된 된 문을 반환 합니다. 이 예제를 실행 하려면 먼저 Web.config 파일에서 사용자 지정 식 작성기를 등록 해야 합니다. 첫 번째 코드 예제에서는 Web.config 파일에 사용자 지정 식 작성기를 등록 하는 방법에 설명 합니다.

<configuration>  
    <system.web>  
       <compilation>  
          <expressionBuilders>  
              <add expressionPrefix="MyCustomExpression"  
               type="MyCustomExpressionBuilder"/>  
          </expressionBuilders>  
       </compilation>  
    </system.web>  
</configuration>  

두 번째 코드 예제에서는.aspx 파일에 있는 식을 참조 하는 방법에 설명 합니다.

<asp:Label ID="Label1" runat="server"   
Text="<%$ MyCustomExpression:Hello, world! %>" />  

세 번째 코드 예제에서는 사용자 지정된 식 작성기에서 파생 하 여 개발 하는 방법에 설명 ExpressionBuilder합니다. 이 코드 예제를 실행 하려면 클래스는 App_Code 폴더에 배치 해야 합니다.

using System;
using System.CodeDom;
using System.Web.UI;
using System.ComponentModel;
using System.Web.Compilation;
using System.Web.UI.Design;

// Apply ExpressionEditorAttributes to allow the 
// expression to appear in the designer.
[ExpressionPrefix("MyCustomExpression")]
[ExpressionEditor("MyCustomExpressionEditor")]
public class MyExpressionBuilder : ExpressionBuilder
{
    // Create a method that will return the result 
    // set for the expression argument.
    public static object GetEvalData(string expression, Type target, string entry)
    {
        return expression;
    }

    public override object EvaluateExpression(object target, BoundPropertyEntry entry, 
    object parsedData, ExpressionBuilderContext context)
    {
        return GetEvalData(entry.Expression, target.GetType(), entry.Name);
    }

    public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, 
    object parsedData, ExpressionBuilderContext context)
    {
        Type type1 = entry.DeclaringType;
        PropertyDescriptor descriptor1 = TypeDescriptor.GetProperties(type1)[entry.PropertyInfo.Name];
        CodeExpression[] expressionArray1 = new CodeExpression[3];
        expressionArray1[0] = new CodePrimitiveExpression(entry.Expression.Trim());
        expressionArray1[1] = new CodeTypeOfExpression(type1);
        expressionArray1[2] = new CodePrimitiveExpression(entry.Name);
        return new CodeCastExpression(descriptor1.PropertyType, new CodeMethodInvokeExpression(new 
       CodeTypeReferenceExpression(base.GetType()), "GetEvalData", expressionArray1));
    }

    public override bool SupportsEvaluate
    {
        get { return true; }
    }
}
Imports System.CodeDom
Imports System.Web.UI
Imports System.ComponentModel
Imports System.Web.Compilation
Imports System.Web.UI.Design

' Apply ExpressionEditorAttributes to allow the 
' expression to appear in the designer.
<ExpressionPrefix("MyCustomExpression")> _
<ExpressionEditor("MyCustomExpressionEditor")> _
Public Class MyExpressionBuilder
    Inherits ExpressionBuilder
    ' Create a method that will return the result 
    ' set for the expression argument.
    Public Shared Function GetEvalData(ByVal expression As String, _
       ByVal target As Type, ByVal entry As String) As Object
        Return expression
    End Function

    Public Overrides Function EvaluateExpression(ByVal target As Object, _
       ByVal entry As BoundPropertyEntry, ByVal parsedData As Object, _
       ByVal context As ExpressionBuilderContext) As Object
        Return GetEvalData(entry.Expression, target.GetType(), entry.Name)
    End Function

    Public Overrides Function GetCodeExpression(ByVal entry _
       As BoundPropertyEntry, ByVal parsedData As Object, ByVal context _
       As ExpressionBuilderContext) As CodeExpression
        Dim type1 As Type = entry.DeclaringType
        Dim descriptor1 As PropertyDescriptor = _
           TypeDescriptor.GetProperties(type1)(entry.PropertyInfo.Name)
        Dim expressionArray1(2) As CodeExpression
        expressionArray1(0) = New CodePrimitiveExpression(entry.Expression.Trim())
        expressionArray1(1) = New CodeTypeOfExpression(type1)
        expressionArray1(2) = New CodePrimitiveExpression(entry.Name)
        Return New CodeCastExpression(descriptor1.PropertyType, _
           New CodeMethodInvokeExpression(New CodeTypeReferenceExpression _
           (MyBase.GetType()), "GetEvalData", expressionArray1))
    End Function

    Public Overrides ReadOnly Property SupportsEvaluate() As Boolean
        Get
            Return True
        End Get
    End Property
End Class

설명

합니다 ExpressionBuilder 클래스는 식 작성기에 대 한 기본 클래스와 같은 AppSettingsExpressionBuilder 페이지 구문 분석 하는 동안 코드 식을 만드는 클래스입니다.

식 작성기는 선언적 식 구문 분석 하 고 컨트롤 속성에 바인딩된 값을 검색 하는 코드를 만듭니다. 컴파일되지 않은 시나리오에서 컴파일되지 않은 기능을 지 원하는 식 작성기 런타임에 식을 평가 합니다.

페이지 파서가 구분 된 문자열 식을 발견 하는 경우 <%$ %>, 문자열의 접두사를 기반으로 식에 대 한 식 작성기를 만듭니다. 접두사에는 콜론 (:)의 왼쪽에 있는 문자열의 부분입니다. 파서가 문자열을 발견 하는 경우 예를 들어 <%$ ConnectionStrings:MessageDB %>을 만듭니다는 ConnectionStringsExpressionBuilder 개체입니다. 접두사는 Web.config 파일에서 식 작성기 연관 된 ExpressionBuilders 섹션입니다.

오른쪽에 있는 선언적 식의 평가 대 한 식 작성기에 전달 됩니다. 재정의 GetCodeExpression 페이지를 사용 하 여 컴파일되는 코드를 생성 하는 방법입니다.

컴파일되지 않은 페이지에서 활성화 되도록 사용자 지정 식 작성기를 하려는 경우 재정의 해야 합니다 EvaluateExpression 식의 결과 나타내는 개체를 반환 하는 방법입니다. 도 재정의 해야 합니다는 SupportsEvaluate 속성을 사용자 지정 식 작성기를 컴파일되지 않은 페이지 지원지 않습니다 나타냅니다.

선택 하 고 식 편집기를 구현 하 여 디자인 타임에 컨트롤 속성과 연결 된 식을 계산 하는 메서드와 속성 집합을 정의할 수 있습니다. 편집기는 클래스 수준의 메타 데이터를 통해 식 작성기에 표시 됩니다. 자세한 내용은 ExpressionEditor를 참조하세요.

구현자 참고

상속 하는 경우는 ExpressionBuilder 재정의 해야 클래스는 GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext) 메서드.

생성자

ExpressionBuilder()

ExpressionBuilder 클래스의 새 인스턴스를 초기화합니다.

속성

SupportsEvaluate

파생 클래스에서 재정의하면 현재 ExpressionBuilder 개체의 비컴파일 페이지 지원 여부를 나타내는 값을 반환합니다.

메서드

Equals(Object)

지정된 개체가 현재 개체와 같은지 확인합니다.

(다음에서 상속됨 Object)
EvaluateExpression(Object, BoundPropertyEntry, Object, ExpressionBuilderContext)

파생 클래스에서 재정의하면 계산된 식을 나타내는 개체를 반환합니다.

GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext)

파생 클래스에서 재정의되면 계산된 식을 가져오기 위해 페이지 실행 중에 사용되는 코드를 반환합니다.

GetHashCode()

기본 해시 함수로 작동합니다.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type을 가져옵니다.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.

(다음에서 상속됨 Object)
ParseExpression(String, Type, ExpressionBuilderContext)

파생 클래스에서 재정의하면 구문 분석된 식을 나타내는 개체를 반환합니다.

ToString()

현재 개체를 나타내는 문자열을 반환합니다.

(다음에서 상속됨 Object)

적용 대상

추가 정보