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ını uygulayarak özel ifade oluşturucusu ExpressionBuilder oluşturmayı göstermektedir. 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şturucunun 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 türetilerek özelleştirilmiş ifade oluşturucunun nasıl geliştirileceği gösterilmektedir ExpressionBuilder. 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ır ve 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şturucusu, ç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 derlenmeyen 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ılmanız gerekir. Özel ifade oluşturucusunun SupportsEvaluate dersiz sayfaları desteklemediğini belirtmek için özelliğini de geçersiz kılmanız gerekir.
bir ifade düzenleyicisi uygulayarak tasarım zamanında 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
ExpressionBuilder() |
ExpressionBuilder sınıfının yeni bir örneğini başlatır. |
Özellikler
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
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() |
Type Geçerli örneğini alır. (Devralındığı yer: Object) |
MemberwiseClone() |
Geçerli Objectöğesinin sığ 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 dizeyi döndürür. (Devralındığı yer: Object) |