ExpressionPrefixAttribute 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
指定要用於表達式產生器的前置詞屬性。 無法繼承這個類別。
public ref class ExpressionPrefixAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Class, AllowMultiple=false)]
public sealed class ExpressionPrefixAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Class, AllowMultiple=false)>]
type ExpressionPrefixAttribute = class
inherit Attribute
Public NotInheritable Class ExpressionPrefixAttribute
Inherits Attribute
- 繼承
- 屬性
範例
以下程式碼範例示範如何使用這個 ExpressionPrefixAttribute 類別。 該屬性會套用到實 ExpressionBuilder 作抽象類別的自訂表達式建構器上。 此實作 ExpressionBuilder 回傳一個評估過的陳述,並傳遞給表達式。 要執行此範例,您必須先在 Web.config 檔案中註冊自訂表達式建置器。 第一個程式碼範例示範如何在 Web.config 檔案中註冊自訂表達式建構器。
<configuration>
<system.web>
<compilation>
<expressionBuilders>
<add expressionPrefix="MyCustomExpression"
type="MyCustomExpressionBuilder"/>
</expressionBuilders>
</compilation>
</system.web>
</configuration>
第二個程式碼範例示範如何在 .aspx 檔案中引用該表達式。
<asp:Label ID="Label1" runat="server"
Text="<%$ MyCustomExpression:Hello, world! %>" />
第三個程式碼範例示範如何從 中推導 ExpressionBuilder出自訂表達式建構器。 要執行此程式碼範例,您必須將類別放入 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
備註
該 ExpressionPrefixAttribute 類別在設計時用於設定檔中未定義的表達式。 使用該 ExpressionPrefix 屬性取得與 ExpressionPrefixAttribute 物件相關聯的前綴名稱。 表達式建構器會尋找以下形式的陳述:
<%$ [expressionPrefix]:[expressionValue] %>
接著,根據表達式的前綴,表達式建構器產生屬性指派的程式碼。 該 expressionPrefix 參數指的是已設定的表達式建構器,該表達式建構器可在設定檔中或透過 ExpressionPrefixAttribute 物件定義。
建構函式
| 名稱 | Description |
|---|---|
| ExpressionPrefixAttribute(String) |
初始化 ExpressionPrefixAttribute 類別的新執行個體。 |
屬性
| 名稱 | Description |
|---|---|
| ExpressionPrefix |
取得當前 ExpressionBuilder 物件的前綴值。 |
| TypeId |
在衍生類別中實作時,取得這個 Attribute的唯一標識碼。 (繼承來源 Attribute) |
方法
| 名稱 | Description |
|---|---|
| Equals(Object) |
傳回值,這個值表示這個實例是否等於指定的物件。 (繼承來源 Attribute) |
| GetHashCode() |
傳回這個實例的哈希碼。 (繼承來源 Attribute) |
| GetType() |
取得目前實例的 Type。 (繼承來源 Object) |
| IsDefaultAttribute() |
在衍生類別中覆寫時,指出這個實例的值是否為衍生類別的預設值。 (繼承來源 Attribute) |
| Match(Object) |
在衍生類別中覆寫時,傳回值,指出這個實例是否等於指定的物件。 (繼承來源 Attribute) |
| MemberwiseClone() |
建立目前 Object的淺層複本。 (繼承來源 Object) |
| ToString() |
傳回表示目前 物件的字串。 (繼承來源 Object) |
明確介面實作
| 名稱 | Description |
|---|---|
| _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
將一組名稱對應至一組對應的分派識別項 (Dispatch Identifier)。 (繼承來源 Attribute) |
| _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
擷取 物件的型別資訊,可用來取得介面的類型資訊。 (繼承來源 Attribute) |
| _Attribute.GetTypeInfoCount(UInt32) |
擷取物件提供的類型資訊介面數目 (0 或 1)。 (繼承來源 Attribute) |
| _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
提供物件所公開屬性和方法的存取權。 (繼承來源 Attribute) |