一、什么是T4模板

T4是对“Text Template Transformation Toolkit”(4个T)的简称。是一个基于文本文件转换的工具包。T4的核心是一个基于“文本模板”的转换引擎(以下简称T4引擎),我们可以通过它生成一切类型的文本型文件,比如我们常用的代码文件类型包括:C#、VB.NET、T-SQL、XML甚至是配置文件等。T4模板的定义非常简单,整个模板的内容包括两种形式:静态形式和动态动态。前者就是直接写在模板中作为原样输出的文本,后者是基于某种语言编写代码,T4引擎会动态执行它们。这和我们通过内联的方式编写的ASP.NET页面很相似:HTML是静态的,以C#或者VB.NET代码便写的动态执行的代码通过相应的标签内嵌其中。

二、T4模板的基本结构

假设我们用“块”(Block)来表示构成T4模板的基本单元,它们基本上可以分成5类:指令块(Directive Block)、文本块(Text Block)、代码语句块(Statement Block)、表达式块(Expression Block)和类特性块(Class Feature Block)。

1、指令块(Directive Block)

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

2、文本块(Text Block)

文本块就是直接原样输出的静态文本,不需要添加任何的标签。在上面的模板文件中,处理定义在<#… #>、<#+… #>和<#=… #>中的文本都属于文本块。比如在指令块结束到第一个“<#”标签之间的内容就是一段静态的文本块。

3、代码语句块(Statement Block)

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

4、表达式块(Expression Block)

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

5、类特性块(Class Feature Block)

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

《未完待续……》

最新文章

  1. primefaces4.0基本教程以及增删改查
  2. Kernel Function--核函数收集
  3. More on Conditions - To Compare -Comparing Sequences and Other Types
  4. IIS URL重写找不到页面 (URLRewriter.dll伪静态)
  5. Solr DIH dataconfig配置
  6. POJ2586Y2K Accounting Bug
  7. iOS开发——高级技术&amp;广告功能的实现
  8. C#经典之Application.DoEvents()的使用
  9. 利用Runtime给UITextView添加占位符(新方法)
  10. Day 1 Python简单程序
  11. ceph的正常卸载与非正常卸载
  12. three.js中的文字
  13. 让Apache和Nginx支持php-fpm模块
  14. LeetCode202:Happy Number 。C#版,在vs2010中通过,leetcode中Wrong Answer
  15. 遇到CloudFlare邮箱混淆,如何解密?
  16. Video 对象方法 canPlayType()
  17. Kubernetes报错Failed to get system container stats for &quot;/system.slice/kubelet.service&quot;
  18. Oracle管理监控之oracle客户端链接服务器配置文档
  19. 一个用JS数组实现的队列
  20. ethers.js-2-wallets and signers

热门文章

  1. VMWare Workstation和VMWare vSphere(转)
  2. 程序包 javax.servlet 不存在 解决办法
  3. 一篇文章彻底弄清ARC始末
  4. extendgcd模板
  5. 问题:今天测试模块一直出现一个问题?module &#39;subprocess&#39; has no attribute &#39;Popen&#39;
  6. delete 和 truncate 的 区别
  7. 找出旋转有序数列的中间值python实现
  8. C#使用SQL语句时候的万用密码问题
  9. C#与数据库连接简单测试
  10. 10 个经典PHP函数