Aracılığıyla paylaş


ExpressionBuilder Sınıf

Tanım

Sayfa ayrıştırma sırasında ifadeleri değerlendirir.

public ref class ExpressionBuilder abstract
public abstract class ExpressionBuilder
type ExpressionBuilder = class
Public MustInherit Class ExpressionBuilder
Devralma
ExpressionBuilder
Türetilmiş

Örnekler

Aşağıdaki kod örnekleri, soyut sınıfı uygulayarak özel ifade oluşturucunun nasıl derlenmesine ilişkin bilgileri ExpressionBuilder gösterir. bu uygulaması ExpressionBuilder , ifadeye geçirilen bir değerlendirilmiş deyimi döndürür. Bu örneği çalıştırmak için önce özel ifade oluşturucusunu Web.config dosyasına kaydetmeniz gerekir. İlk kod örneği, özel ifade oluşturucusunun Web.config dosyasına nasıl kaydedileceklerini gösterir.

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

İkinci kod örneği, bir .aspx dosyasında ifadeye nasıl başvurduğunu gösterir.

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

Üçüncü kod örneğinde, 'den ExpressionBuildertüretilerek özelleştirilmiş bir ifade oluşturucunun nasıl geliştirileceği gösterilmektedir. Bu kod örneğini çalıştırmak için sınıfını App_Code klasörüne yerleştirmeniz gerekir.

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

Açıklamalar

ExpressionBuilder sınıfı, sayfa ayrıştırma sırasında kod ifadeleri oluşturan sınıfı gibi AppSettingsExpressionBuilder ifade oluşturucuları için temel sınıftır.

İfade oluşturucuları bildirim temelli ifadeleri ayrıştırıp bir denetim özelliğine bağlı değerleri almak için kod oluşturur. Derleme olmayan senaryolarda, derleme yok özelliğini destekleyen bir ifade oluşturucu, çalışma zamanında ifadeyi değerlendirir.

Sayfa ayrıştırıcısı dizesiyle sınırlandırılmış bir ifadeyle karşılaştığında, dizedeki <%$ %>öneki temel alarak ifade için bir ifade oluşturucusu oluşturur. Ön ek, dizenin iki nokta üst üste (:)) solundaki bölümüdür. Örneğin, ayrıştırıcı dizesiyle <%$ ConnectionStrings:MessageDB %>karşılaştığında bir ConnectionStringsExpressionBuilder nesnesi oluşturur. Ön ekler, bölümündeki Web.config dosyasındaki ifade oluşturucularıyla ilişkilendirilir ExpressionBuilders .

Bildirim temelli ifadenin sağ tarafı, değerlendirme için ifade oluşturucusna geçirilir. GetCodeExpression Sayfayla derlenecek kodu oluşturmak için yöntemini geçersiz kılın.

Özel ifade oluşturucusunun derlenmemiş sayfalarda etkin olmasını istiyorsanız, ifadenin EvaluateExpression sonuçlarını temsil eden bir nesne döndürmek için yöntemini de geçersiz kılmalısınız. Özel ifade oluşturucusunun SupportsEvaluate derleme olmayan sayfaları desteklemediğini belirtmek için özelliğini de geçersiz kılmanız gerekir.

bir ifade düzenleyicisi uygulayarak tasarım zamanında bir denetim özelliğiyle ilişkili bir ifadeyi seçmek ve değerlendirmek için bir dizi özellik ve yöntem tanımlayabilirsiniz. Düzenleyici, sınıf düzeyinde meta veriler aracılığıyla ifade oluşturucusunun üzerinde işaretlenir. Daha fazla bilgi için bkz. ExpressionEditor.

Uygulayanlara Notlar

sınıfından ExpressionBuilder devraldığınızda yöntemini geçersiz kılmanız GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext) gerekir.

Oluşturucular

Name Description
ExpressionBuilder()

ExpressionBuilder sınıfının yeni bir örneğini başlatır.

Özellikler

Name Description
SupportsEvaluate

Türetilmiş bir sınıfta geçersiz kılındığında, geçerli ExpressionBuilder nesnenin derlenmemiş sayfaları destekleyip desteklemediğini belirten bir değer döndürür.

Yöntemler

Name Description
Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
EvaluateExpression(Object, BoundPropertyEntry, Object, ExpressionBuilderContext)

Türetilmiş bir sınıfta geçersiz kılındığında, değerlendirilen bir ifadeyi temsil eden bir nesne döndürür.

GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext)

Türetilmiş bir sınıfta geçersiz kılındığında, değerlendirilen ifadeyi almak için sayfa yürütme sırasında kullanılan kodu döndürür.

GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetType()

Geçerli örneğin Type alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectbasit bir kopyasını oluşturur.

(Devralındığı yer: Object)
ParseExpression(String, Type, ExpressionBuilderContext)

Türetilmiş bir sınıfta geçersiz kılındığında, ayrıştırılmış ifadeyi temsil eden bir nesne döndürür.

ToString()

Geçerli nesneyi temsil eden bir dize döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır

Ayrıca bkz.