HTML5技术

【.net 深呼吸】细说CodeDom(2):表达式、语句 - 东邪独孤(2)

字号+ 作者:H5之家 来源:H5之家 2016-12-13 12:00 我要评论( )

CodeThisReferenceExpression thisexpr = new CodeThisReferenceExpression();CodeFieldReferenceExpression fexp = new CodeFieldReferenceExpression();fexp.FieldName = ;fexp.TargetObject = thisexpr;CodeBina

CodeThisReferenceExpression thisexpr = new CodeThisReferenceExpression(); CodeFieldReferenceExpression fexp = new CodeFieldReferenceExpression(); fexp.FieldName = ; fexp.TargetObject = thisexpr; CodeBinaryOperatorExpression opt = new CodeBinaryOperatorExpression(); opt.Left = fexp; opt.Right = new CodePrimitiveExpression((int)300); opt.Operator = CodeBinaryOperatorType.Assign;

上面例子中的 CodeBinaryOperatorExpression 对象指定运算符为 Assign, 即赋值符号(=)。然后我们再看它两边的操作数。左边引用的是当前实例的字段,首先要创建一个CodeThisReferenceExpression,这个类不需要指定任何参数,因为它生成的就是this关键字,然后用CodeFieldReferenceExpression来引用this实例中一个叫m_val的字段;右边操作数是一个常量,常量值可以用CodePrimitiveExpression来表示。

CodePrimitiveExpression 一般用于指定基础类型的常量值,如int、string、double等。如这样

CodePrimitiveExpression p = new CodePrimitiveExpression(0.1322d);

生成代码后,会自动将传入的值表示为double类型常量。生成代码如下:

0.1322D

再比如

CodePrimitiveExpression p = );

就会生成字符串常量:

好了,上面的赋值表达式最终得到的结果如下:

(this.m_val = 300)

 

下面咱们来生成一句 typeof表达式。

CodeTypeOfExpression texp = new CodeTypeOfExpression(typeof(string)); Console.WriteLine(); CodeDomProvider prd = CodeDomProvider.CreateProvider(); prd.GenerateCodeFromExpression(texp, Console.Out, null); Console.WriteLine(); Console.WriteLine(); CodeDomProvider prd2 = CodeDomProvider.CreateProvider(); prd2.GenerateCodeFromExpression(texp, Console.Out, null);

很简单,实例化 CodeTypeOfExpression 时,把某个类型的type传进去就行了。

最后输出的代码如下:

C# 代码: typeof(string) VB 代码: GetType(String)

 

咱们再来个类型转换的表达式。

CodeVariableReferenceExpression vexp = new CodeVariableReferenceExpression(); vexp.VariableName = ; CodeTypeReference tref = new CodeTypeReference(typeof(decimal)); CodeCastExpression cexp = new CodeCastExpression(); cexp.Expression = vexp; cexp.TargetType = tref;

CodeVariableReferenceExpression主要设置两个参数,Expression 指的是要进行类型转换的对象,通常是一个变量;TargetType是要转换的目标类型,需要用一个CodeTypeReference来封装,使用时直接把类型的type传递即可。

类型转换表达式生成代码如下:

((decimal)(x))

 

=================================================

学会使用表达式后,语句就好办了,因为语句就是由表达式组成的,只是为了说明是语句,在C类风格的语言中会以英文的分号结尾(VB除外)。

来,来一句赋值语句。

CodeVariableReferenceExpression left = ); CodePrimitiveExpression sexp = ); CodeAssignStatement assstm = new CodeAssignStatement(); assstm.Left = left; assstm.Right = sexp;

CodeAssignStatement 和刚才的赋值表达式很像,也需要指定左边的表达式和右边的表达式。最后生成的代码如下:

f = ;

大家看到了,语句结尾是有分号的,刚才的表达式是没有分号的。

 

接下来,咱们声明一个变量,然后给它一个值。

CodeVariableDeclarationStatement decl = ); CodeAssignStatement ass = new CodeAssignStatement(); ass.Left = ); ass.Right = new CodePrimitiveExpression(98000); CodeDomProvider prd = CodeDomProvider.CreateProvider(); prd.GenerateCodeFromStatement(decl, Console.Out, null); prd.GenerateCodeFromStatement(ass, Console.Out, null);

这段实际上是生成了两句代码,第一句是声明语句,CodeVariableDeclarationStatement将产生声明变量的语句,需要指定变量的类型和变量名。

第二句是赋值语句,需要指定左边和右边。左边引用变量n,右边是常量值。

生成代码如下:

int n; n = 98000;

以上代码不够简洁,我们完全可以在声明变量的时候,就将它初始化,这样只用一个语句就可以了。

CodeVariableDeclarationStatement decl = , new CodePrimitiveExpression(98000));

这样一个语句就完成了,生成的代码如下:

int n = 98000;

 

这里老周不会将所有语句一个个做介绍。本文介绍的这些表达式和语句,主要是帮助初学者朋友们练手,以便找到感觉,剩下的一些复杂的语句——如选择语句、循环语句这些,老周在后面的文章中会介绍的。

OK,今天的牛皮就吹到这里,希望对各位有帮助。

 

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • .NET Core 首例 Office 开源跨平台组件(NPOI Core) - Savorboard

    .NET Core 首例 Office 开源跨平台组件(NPOI Core) - Savorboard

    2016-12-08 13:00

  • 最好的.NET开源免费ZIP库DotNetZip(.NET组件介绍之三) - 彭泽0902

    最好的.NET开源免费ZIP库DotNetZip(.NET组件介绍之三) - 彭泽0902

    2016-12-08 11:00

  • ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑 - 路过秋天

    ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑

    2016-11-20 16:00

  • 在ASP.NET Core中使用Angular2,以及与Angular2的Token base身份认证 - 微软一站式示

    在ASP.NET Core中使用Angular2,以及与Angular2的Token base身份认证

    2016-11-20 15:00

网友点评
!