ExpressionBuilder Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Kiértékeli a kifejezéseket a lapelemzés során.
public ref class ExpressionBuilder abstract
public abstract class ExpressionBuilder
type ExpressionBuilder = class
Public MustInherit Class ExpressionBuilder
- Öröklődés
-
ExpressionBuilder
- Származtatott
Példák
Az alábbi kód példák bemutatják, hogyan hozhat létre egyéni kifejezésszerkesztőt az ExpressionBuilder absztrakt osztály implementálásával. A végrehajtás ExpressionBuilder egy kiértékelt utasítást ad vissza, amelyet a rendszer átad a kifejezésnek. A példa futtatásához először regisztrálnia kell az egyéni kifejezésszerkesztőt a Web.config fájlban. Az első példakód bemutatja, hogyan regisztrálhatja az egyéni kifejezésszerkesztőt a Web.config fájlban.
<configuration>
<system.web>
<compilation>
<expressionBuilders>
<add expressionPrefix="MyCustomExpression"
type="MyCustomExpressionBuilder"/>
</expressionBuilders>
</compilation>
</system.web>
</configuration>
A második példakód bemutatja, hogyan hivatkozhat a kifejezésre egy .aspx fájlban.
<asp:Label ID="Label1" runat="server"
Text="<%$ MyCustomExpression:Hello, world! %>" />
A harmadik példakód bemutatja, hogyan fejleszthet testre szabott kifejezésszerkesztőt a forrásból ExpressionBuilder. A példakód futtatásához az osztályt a App_Code mappába kell helyeznie.
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
Megjegyzések
Az ExpressionBuilder osztály olyan kifejezésszerkesztők alaposztálya, például az osztály, amelyek kódkifejezéseket hoznak létre az AppSettingsExpressionBuilder oldalelemzés során.
A kifejezésszerkesztők deklaratív kifejezéseket elemeznek, és kódot hoznak létre egy vezérlőtulajdonsághoz kötött értékek lekéréséhez. Fordítás nélküli forgatókönyvekben a fordítás nélküli funkciót támogató kifejezésszerkesztő kiértékeli a kifejezést futás közben.
Amikor a lapelemző a sztringgel <%$ %>elválasztott kifejezéssel találkozik, létrehoz egy kifejezésszerkesztőt a kifejezéshez a sztring előtagja alapján. Az előtag a sztringnek a kettősponttól balra eső része (:). Ha például az elemző találkozik a sztringgel <%$ ConnectionStrings:MessageDB %>, létrehoz egy objektumot ConnectionStringsExpressionBuilder . Az előtagok a szakasz Web.config fájljának kifejezésszerkesztőihez vannak társítva ExpressionBuilders .
A deklaratív kifejezés jobb oldala a kifejezésszerkesztőnek lesz átadva kiértékeléshez. Felülbírálja az GetCodeExpression oldallal lefordítandó kód létrehozásához használható metódust.
Ha azt szeretné, hogy az egyéni kifejezésszerkesztő aktív legyen a nem lefordított oldalakon, felül kell bírálnia a EvaluateExpression metódust is, hogy egy olyan objektumot adjon vissza, amely a kifejezés eredményeit jelöli. Felül kell bírálnia a SupportsEvaluate tulajdonságot is, hogy jelezze, hogy az egyéni kifejezésszerkesztő támogatja a fordítás nélküli oldalakat.
A kifejezésszerkesztő implementálásával definiálhat tulajdonságokat és metódusokat egy vezérlőtulajdonsághoz társított kifejezés kiválasztásához és kiértékeléséhez. A szerkesztő osztályszintű metaadatokkal van megjelölve a kifejezésszerkesztőben. További információért lásd ExpressionEditor.
Megjegyzések az implementálókhoz
Ha az ExpressionBuilder osztálytól örököl, felül kell bírálnia a metódust GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext) .
Konstruktorok
| Name | Description |
|---|---|
| ExpressionBuilder() |
Inicializálja a ExpressionBuilder osztály új példányát. |
Tulajdonságok
| Name | Description |
|---|---|
| SupportsEvaluate |
Ha egy származtatott osztályban felül van bírálva, egy értéket ad vissza, amely jelzi, hogy az aktuális ExpressionBuilder objektum támogatja-e a fordítás nélküli oldalakat. |
Metódusok
| Name | Description |
|---|---|
| Equals(Object) |
Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal. (Öröklődés forrása Object) |
| EvaluateExpression(Object, BoundPropertyEntry, Object, ExpressionBuilderContext) |
Ha egy származtatott osztály felül van bírálva, egy kiértékelt kifejezést képviselő objektumot ad vissza. |
| GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext) |
Ha egy származtatott osztályban felül van bírálva, az oldalvégrehajtás során használt kódot adja vissza a kiértékelt kifejezés lekéréséhez. |
| GetHashCode() |
Ez az alapértelmezett kivonatoló függvény. (Öröklődés forrása Object) |
| GetType() |
Lekéri az Type aktuális példányt. (Öröklődés forrása Object) |
| MemberwiseClone() |
Az aktuális Objectpéldány sekély másolatát hozza létre. (Öröklődés forrása Object) |
| ParseExpression(String, Type, ExpressionBuilderContext) |
Ha egy származtatott osztály felül van bírálva, egy olyan objektumot ad vissza, amely az elemzési kifejezést jelöli. |
| ToString() |
Az aktuális objektumot jelképező sztringet ad vissza. (Öröklődés forrása Object) |