英語で読む

次の方法で共有


ExpressionBuilder クラス

定義

ページ解析中に式を評価します。

C#
public abstract class ExpressionBuilder
継承
ExpressionBuilder
派生

次のコード例は、抽象クラスを実装してカスタム式ビルダーを構築する方法を ExpressionBuilder 示しています。 この実装は ExpressionBuilder 、式に渡される評価されたステートメントを返します。 この例を実行するには、最初にカスタム式ビルダーをWeb.config ファイルに登録する必要があります。 最初のコード例では、Web.config ファイルにカスタム式ビルダーを登録する方法を示します。

<configuration>  
    <system.web>  
       <compilation>  
          <expressionBuilders>  
              <add expressionPrefix="MyCustomExpression"  
               type="MyCustomExpressionBuilder"/>  
          </expressionBuilders>  
       </compilation>  
    </system.web>  
</configuration>  

2 番目のコード例では、.aspx ファイルで式を参照する方法を示します。

<asp:Label ID="Label1" runat="server"   
Text="<%$ MyCustomExpression:Hello, world! %>" />  

3 番目のコード例では、次から ExpressionBuilder派生してカスタマイズされた式ビルダーを開発する方法を示します。 このコード例を実行するには、クラスを App_Code フォルダーに配置する必要があります。

C#
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; }
    }
}

注釈

この ExpressionBuilder クラスは、ページ解析中にコード式を AppSettingsExpressionBuilder 作成する、クラスなどの式ビルダーの基本クラスです。

式ビルダーは宣言式を解析し、コントロール プロパティにバインドされた値を取得するコードを作成します。 コンパイルなしのシナリオでは、コンパイルなしの機能をサポートする式ビルダーは、実行時に式を評価します。

ページ パーサーは、文字列で区切られた式を検出すると、文字列 <%$ %>内のプレフィックスに基づいて式の式ビルダーを作成します。 プレフィックスは、コロン (:)) の左側にある文字列の部分です。 たとえば、パーサーが文字列 <%$ ConnectionStrings:MessageDB %>を検出すると、オブジェクトが ConnectionStringsExpressionBuilder 作成されます。 プレフィックスは、セクションのWeb.config ファイル内の式ビルダーに ExpressionBuilders 関連付けられます。

宣言式の右側は、評価のために式ビルダーに渡されます。 メソッドを GetCodeExpression オーバーライドして、ページでコンパイルされるコードを生成します。

コンパイルされていないページでカスタム式ビルダーをアクティブにする場合は、式の結果を EvaluateExpression 表すオブジェクトを返すようにメソッドをオーバーライドする必要もあります。 カスタム式ビルダーがコンパイルなしのページを SupportsEvaluate サポートしていることを示すためにも、プロパティをオーバーライドする必要があります。

式エディターを実装することで、デザイン時にコントロール プロパティに関連付けられている式を選択および評価するためのプロパティとメソッドのセットを定義できます。 エディターは、クラス レベルのメタデータによって式ビルダーでマークされます。 詳細については、「ExpressionEditor」を参照してください。

注意 (実装者)

クラスから ExpressionBuilder 継承する場合は、メソッドをオーバーライドする GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext) 必要があります。

コンストラクター

ExpressionBuilder()

ExpressionBuilder クラスの新しいインスタンスを初期化します。

プロパティ

SupportsEvaluate

派生クラスでオーバーライドされた場合は、現在の ExpressionBuilder オブジェクトがコンパイルなしページをサポートするかどうかを示す値を返します。

メソッド

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
EvaluateExpression(Object, BoundPropertyEntry, Object, ExpressionBuilderContext)

派生クラスでオーバーライドされた場合は、評価された式を表すオブジェクトを返します。

GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext)

派生クラスでオーバーライドされた場合、評価された式を取得するためにページ実行中に使用されるコードが返されます。

GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
ParseExpression(String, Type, ExpressionBuilderContext)

派生クラスでオーバーライドされた場合は、解析された式を表すオブジェクトを返します。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

適用対象

製品 バージョン
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8

こちらもご覧ください