zoukankan      html  css  js  c++  java
  • T4模板的基本结构

    (转自:http://www.cnblogs.com/yank/archive/2012/02/14/2342287.html)

    T4模板的基本结构

    代码块的总体分类,就是两种:文本、程序脚本

    我感觉这样分类就够了,跟我们用c#写代码生成原理差不多。也是又C#代码和文本组成的。

    文本:就是需要生成的文本

    程序脚本:内部执行,最终生成想要的文本。T4中<# #>中的部分都属于程序脚本内容。

     为了细分语法,方便大家更好的理解,用“块”(Block)来表示构成T4模板的基本单元,它们基本上可以分成5类:指令块(Directive Block)、文本块(Text Block)、代码语句块(Statement Block)、表达式块(Expression Block)和类特性块(Class Feature Block)。

    1、指令块(Directive Block)

    和ASP.NET页面的指令一样,它们出现在文件头,通过<#@…#>表示。其中<#@ template …#>指令是必须的,用于定义模板的基本属性,比如编程语言、基于的文化、是否支持调式等等。比较常用的指令还包括用于程序集引用的<#@ assembly…#>,用于导入命名空间的<#@ import…#>等等。

    指令通常是模板文件或包含的文件中的第一个元素。不应将它们放置在代码块 <#...#> 内,也不应放置在类功能块 <#+...#> 之后。

    T4 模板指令

    <#@ template [language="VB"] [hostspecific="true"] [debug="true"] [inherits="templateBaseClass"] [culture="code"] [compilerOptions="options"] #>

    T4 参数指令

    <#@ parameter type="Full.TypeName"name="ParameterName"#>

    T4 输出指令

    <#@ output extension=".fileNameExtension"[encoding="encoding"] #>

    T4 程序集指令

    <#@ assembly name="[assembly strong name|assembly file name]"#>

    T4 导入指令

    <#@ import namespace="namespace"#>

    T4 包含指令

    <#@ include file="filePath"#>

    2、文本块(Text Block)

    文本块就是直接原样输出的静态文本,不需要添加任何的标签。

    3、代码语句块(Statement Block)

    代码语句块通过<#Statement#>的形式表示,中间是一段通过相应编程语言编写的程序调用,我们可以通过代码语句快控制文本转化的流程。在上面的代码中,我们通过代码语句块实现对一个数组进行遍历,输出重复的Console.WriteLine("Hello {0},Welcome to T4 World!","<#= p.Name #>");语句。 

    4、表达式块(Expression Block)

    表达式块以<#=Expression#>的形式表示,通过它之际上动态的解析的字符串表达内嵌到输出的文本中。比如在上面的foreach循环中,每次迭代输出的人名就是通过表达式块的形式定义的(<#=  p.Name #>)

    5、类特性块(Class Feature Block)

    如果文本转化需要一些比较复杂的逻辑,我们需要写在一个单独的辅助方法中,甚至是定义一些单独的类,我们就是将它们定义在类特性块中。类特性块的表现形式为<#+ FeatureCode #>,对于Hello World模板,得到人名列表的GetPersonList方法就定义在类特性块中。

  • 相关阅读:
    sql语句 之聚合函数
    UML类图几种关系的总结
    关于Object.defineProperty的get和set
    devDependencies和dependencies的区别
    函数声明和函数表达式的区别
    移动端滑屏滚动事件的问题(横向滑动阻止垂直页面滚动)
    使用Cordova和JQM在ios上需要注意的问题
    阻止事件冒泡,阻止默认事件,event.stopPropagation()和event.preventDefault(),return fal的区别
    有关闭包的总结
    CSS命名规范——BEM思想(非常赞的规范)
  • 原文地址:https://www.cnblogs.com/FindSelf/p/4211485.html
Copyright © 2011-2022 走看看