ExpressionBuilder-Klasse
Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen.
Übersetzung
Original

ExpressionBuilder-Klasse

Wertet während der Seitenanalyse Ausdrücke aus.

Namespace:  System.Web.Compilation
Assembly:  System.Web (in System.Web.dll)

public abstract class ExpressionBuilder

Der ExpressionBuilder-Typ macht die folgenden Member verfügbar.

  NameBeschreibung
Geschützte MethodeExpressionBuilderInitialisiert eine neue Instanz der ExpressionBuilder-Klasse.
Zum Seitenanfang

  NameBeschreibung
Öffentliche EigenschaftSupportsEvaluateGibt nach dem Überschreiben in einer abgeleiteten Klasse einen Wert zurück, der angibt, ob das aktuelle ExpressionBuilder-Objekt nicht kompilierte Seiten unterstützt.
Zum Seitenanfang

  NameBeschreibung
Öffentliche MethodeEquals(Object) Bestimmt, ob das übergegebene Object und das aktuelle Object gleich sind. (Von Object geerbt.)
Öffentliche MethodeEvaluateExpressionGibt nach dem Überschreiben in einer abgeleiteten Klasse ein Objekt zurück, das einen ausgewerteten Ausdruck darstellt.
Geschützte MethodeFinalize Gibt einem Objekt Gelegenheit, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. (Von Object geerbt.)
Öffentliche MethodeGetCodeExpressionGibt nach dem Überschreiben in einer abgeleiteten Klasse Code zurück, mit dem während der Seitenausführung der ausgewertete Ausdruck abgerufen wird.
Öffentliche MethodeGetHashCodeFungiert als Hashfunktion für einen bestimmten Typ. (Von Object geerbt.)
Öffentliche MethodeGetTypeRuft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Geschützte MethodeMemberwiseCloneErstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.)
Öffentliche MethodeParseExpressionGibt nach dem Überschreiben in einer abgeleiteten Klasse ein Objekt zurück, das den analysierten Ausdruck darstellt.
Öffentliche MethodeToStringGibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Von Object geerbt.)
Zum Seitenanfang

Die ExpressionBuilder-Klasse ist die Basisklasse für Ausdrucks-Generatoren (z. B. die AppSettingsExpressionBuilder-Klasse), die während der Seitenanalyse Codeausdrücke erstellen.

Ausdrucks-Generatoren analysieren deklarative Ausdrücke und erstellen Code, um an eine Steuerelementeigenschaft gebundene Werte abzurufen. In Szenarios wertet ein Ausdrucks-Generator, der ein Feature unterstützt, in dem keine Kompilierung erfolgt, den Ausdruck zur Laufzeit aus.

Wenn der Seitenparser einen Ausdruck entdeckt, der durch die Zeichenfolge <%$ %> begrenzt ist, erstellt er basierend auf dem Präfix in der Zeichenfolge einen Ausdrucks-Generator für den Ausdruck. Das Präfix ist der Teil der Zeichenfolge, der sich links vom Doppelpunkt (:) befindet. Wenn der Parser beispielsweise auf die Zeichenfolge <%$ ConnectionStrings:MessageDB %> trifft, erstellt er ein ConnectionStringsExpressionBuilder-Objekt. Präfixe werden in der Datei Web.config im Abschnitt ExpressionBuilders Ausdrucks-Generatoren zugeordnet.

Die rechte Seite des deklarativen Ausdrucks wird zur Auswertung an den Ausdrucks-Generator übergeben. Überschreiben Sie die GetCodeExpression-Methode, um Code zu generieren, der mit der Seite kompiliert wird.

Wenn der benutzerdefinierte Ausdrucks-Generator auf nicht kompilierten Seiten aktiv sein soll, müssen Sie die EvaluateExpression-Methode überschreiben, sodass sie ein Objekt zurückgibt, das die Ergebnisse des Ausdrucks darstellt. Sie müssen auch die SupportsEvaluate-Eigenschaft überschreiben, um anzugeben, dass der benutzerdefinierte Ausdrucks-Generator Seiten ohne Kompilierung unterstützt.

Sie können eine Reihe von Eigenschaften und Methoden für das Auswählen und Auswerten eines Ausdrucks definieren, der zur Entwurfszeit einer Steuerelementeigenschaft zugeordnet wird, indem Sie einen Ausdrucks-Editor implementieren. Der Editor wird im Ausdrucks-Generator durch Metadaten auf Klassenebene markiert. Weitere Informationen finden Sie unter ExpressionEditor.

Hinweise zur Vererbung

Wenn Sie von der ExpressionBuilder-Klasse erben, müssen Sie die GetCodeExpression-Methode überschreiben.

In den folgenden Codebeispielen wird veranschaulicht, wie ein benutzerdefinierter Ausdrucks-Generator erstellt wird, indem die abstrakte ExpressionBuilder-Klasse implementiert wird. Diese Implementierung von ExpressionBuilder gibt eine ausgewertete Anweisung zurück, die an den Ausdruck übergeben wird. Um dieses Beispiel auszuführen, müssen Sie zuerst den benutzerdefinierten Ausdrucks-Generator in der Datei Web.config registrieren. Im ersten Codebeispiel wird veranschaulicht, wie der benutzerdefinierte Ausdrucks-Generator in der Datei Web.config registriert wird.

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

Im zweiten Codebeispiel wird veranschaulicht, wie in einer ASPX-Datei auf den Ausdruck verwiesen wird.

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

Im dritten Codebeispiel wird veranschaulicht, wie ein benutzerdefinierter Ausdrucks-Generator entwickelt wird, indem er von ExpressionBuilder abgeleitet wird. Um dieses Codebeispiel auszuführen, müssen Sie die Klasse im Ordner App_Code platzieren.


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; }
    }
}


.NET Framework

Unterstützt in: 4, 3.5, 3.0, 2.0

Windows 7, Windows Vista SP1 oder höher, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core wird nicht unterstützt), Windows Server 2008 R2 (Server Core wird mit SP1 oder höher unterstützt), Windows Server 2003 SP2

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2016 Microsoft