ExpressionBuilder Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mengevaluasi ekspresi selama penguraian halaman.
public ref class ExpressionBuilder abstract
public abstract class ExpressionBuilder
type ExpressionBuilder = class
Public MustInherit Class ExpressionBuilder
- Warisan
-
ExpressionBuilder
- Turunan
Contoh
Contoh kode berikut menunjukkan cara membangun penyusun ekspresi kustom dengan menerapkan ExpressionBuilder kelas abstrak. Implementasi ExpressionBuilder ini mengembalikan pernyataan yang dievaluasi yang diteruskan ke ekspresi. Untuk menjalankan contoh ini, Anda harus terlebih dahulu mendaftarkan penyusun ekspresi kustom dalam file Web.config. Contoh kode pertama menunjukkan cara mendaftarkan penyusun ekspresi kustom dalam file Web.config.
<configuration>
<system.web>
<compilation>
<expressionBuilders>
<add expressionPrefix="MyCustomExpression"
type="MyCustomExpressionBuilder"/>
</expressionBuilders>
</compilation>
</system.web>
</configuration>
Contoh kode kedua menunjukkan cara mereferensikan ekspresi dalam file .aspx.
<asp:Label ID="Label1" runat="server"
Text="<%$ MyCustomExpression:Hello, world! %>" />
Contoh kode ketiga menunjukkan cara mengembangkan penyusun ekspresi yang disesuaikan dengan berasal dari ExpressionBuilder. Untuk menjalankan contoh kode ini, Anda harus menempatkan kelas di folder 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
Keterangan
Kelas ExpressionBuilder adalah kelas dasar untuk penyusun ekspresi, seperti AppSettingsExpressionBuilder kelas , yang membuat ekspresi kode selama penguraian halaman.
Penyusun ekspresi mengurai ekspresi deklaratif dan membuat kode untuk mengambil nilai yang terikat ke properti kontrol. Dalam skenario tanpa kompilasi, penyusun ekspresi yang mendukung fitur tanpa kompilasi mengevaluasi ekspresi selama run time.
Ketika pengurai halaman menemukan ekspresi yang dibatasi dengan string <%$ %>, itu membuat penyusun ekspresi untuk ekspresi berdasarkan awalan dalam string. Awalan adalah bagian dari string yang ada di sebelah kiri titik dua (:). Misalnya, ketika pengurai menemukan string <%$ ConnectionStrings:MessageDB %>, ia membuat ConnectionStringsExpressionBuilder objek. Awalan dikaitkan dengan penyusun ekspresi dalam file Web.config di bagian .ExpressionBuilders
Sisi kanan ekspresi deklaratif diteruskan ke penyusun ekspresi untuk dievaluasi. Ambil alih GetCodeExpression metode untuk menghasilkan kode yang akan dikompilasi dengan halaman.
Jika Anda ingin penyusun ekspresi kustom aktif pada halaman yang tidak dikompilasi, Anda juga harus mengambil alih EvaluateExpression metode untuk mengembalikan objek yang mewakili hasil ekspresi. Anda juga harus mengambil alih SupportsEvaluate properti untuk menunjukkan bahwa penyusun ekspresi kustom tidak mendukung halaman tanpa kompilasi.
Anda dapat menentukan sekumpulan properti dan metode untuk memilih dan mengevaluasi ekspresi yang terkait dengan properti kontrol pada waktu desain dengan menerapkan editor ekspresi. Editor ditandai pada penyusun ekspresi melalui metadata tingkat kelas. Untuk informasi selengkapnya, lihat ExpressionEditor .
Catatan Bagi Implementer
Ketika Anda mewarisi dari ExpressionBuilder kelas , Anda harus mengambil alih GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext) metode .
Konstruktor
| Nama | Deskripsi |
|---|---|
| ExpressionBuilder() |
Menginisialisasi instans baru dari kelas ExpressionBuilder. |
Properti
| Nama | Deskripsi |
|---|---|
| SupportsEvaluate |
Saat ditimpa di kelas turunan, mengembalikan nilai yang menunjukkan apakah objek saat ini ExpressionBuilder mendukung halaman tanpa kompilasi. |
Metode
| Nama | Deskripsi |
|---|---|
| Equals(Object) |
Menentukan apakah objek yang ditentukan sama dengan objek saat ini. (Diperoleh dari Object) |
| EvaluateExpression(Object, BoundPropertyEntry, Object, ExpressionBuilderContext) |
Saat ditimpa dalam kelas turunan, mengembalikan objek yang mewakili ekspresi yang dievaluasi. |
| GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext) |
Saat ditimpa dalam kelas turunan, mengembalikan kode yang digunakan selama eksekusi halaman untuk mendapatkan ekspresi yang dievaluasi. |
| GetHashCode() |
Berfungsi sebagai fungsi hash default. (Diperoleh dari Object) |
| GetType() |
Mendapatkan Type instans saat ini. (Diperoleh dari Object) |
| MemberwiseClone() |
Membuat salinan dangkal dari Objectsaat ini. (Diperoleh dari Object) |
| ParseExpression(String, Type, ExpressionBuilderContext) |
Saat ditimpa dalam kelas turunan, mengembalikan objek yang mewakili ekspresi yang diurai. |
| ToString() |
Mengembalikan string yang mewakili objek saat ini. (Diperoleh dari Object) |