ExpressionBuilder Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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) |