ExpressionBuilder 类

ExpressionBuilder 类

.NET Framework 4
 
其他版本
 
此主题尚未评级 - 评价此主题
 

 

在分析页的过程中计算表达式。

 

命名空间:   System.Web.Compilation
程序集:  System.Web(在 System.Web.dll 中)
C#
C++
F#
VB
 
public abstract class ExpressionBuilder

ExpressionBuilder 类型公开以下成员。

 名称说明
受保护的方法ExpressionBuilder初始化 ExpressionBuilder 类的新实例。
页首
 名称说明
公共属性SupportsEvaluate在派生类中重写时,会返回一个值,该值指示当前 ExpressionBuilder 对象是否支持非编译页。
页首
 名称说明
公共方法Equals(Object)确定指定的 Object 是否等于当前的 Object (继承自 Object。)
公共方法EvaluateExpression在派生类中重写时,会返回一个对象,该对象表示计算出的表达式。
受保护的方法Finalize允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
公共方法GetCodeExpression在派生类中重写时,返回在页执行过程中用来获取计算出的表达式的代码。
公共方法GetHashCode用作特定类型的哈希函数。 (继承自 Object。)
公共方法GetType获取当前实例的 Type (继承自 Object。)
受保护的方法MemberwiseClone创建当前 Object 的浅表副本。 (继承自 Object。)
公共方法ParseExpression在派生类中重写时,会返回一个对象,该对象表示通过分析得到的表达式。
公共方法ToString返回表示当前对象的字符串。 (继承自 Object。)
页首

ExpressionBuilder 类是在分析页的过程中创建代码表达式的表达式生成器(如 AppSettingsExpressionBuilder 类)的基类。

表达式生成器分析声明性表达式,并创建代码来检索绑定到控件属性的值。在非编译方案中,支持非编译功能的表达式生成器在运行时计算表达式。

页分析器如果遇到用 <%$ %> 字符串分隔的表达式,则根据字符串中的前缀为表达式创建表达式生成器。前缀是字符串中冒号 (:) 左侧的部分。例如,当分析器遇到字符串 <%$ ConnectionStrings:MessageDB %> 时,会创建一个 ConnectionStringsExpressionBuilder 对象。前缀与 Web.config 文件的 ExpressionBuilders 节中的表达式生成器相关联。

声明性表达式的右侧被传递给表达式生成器进行计算。重写 GetCodeExpression 方法可生成与页一起编译的代码。

如果希望自定义表达式生成器在不编译的页上是活动的,还必须重写 EvaluateExpression 方法以返回表示表达式结果的对象。此外,还必须重写 SupportsEvaluate 属性,以指示自定义表达式生成器不支持非编译页。

可以定义一组属性和方法,用于选择和计算在设计时使用表达式编辑器与控件属性进行关联的表达式。编辑器通过类级别的元数据在表达式生成器上进行标记。有关更多信息,请参见 ExpressionEditor

 

对继承者的说明

ExpressionBuilder 类继承时,必须重写 GetCodeExpression 方法。

下面的代码示例演示如何通过实现 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 文件夹中。

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


.NET Framework
受以下版本支持:4、3.5、3.0、2.0

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2

 

 

.NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见 .NET Framework 系统要求
此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

转载于:https://www.cnblogs.com/xust/articles/2945658.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值