我正在使用t4(文本模板)生成电子邮件,并希望为我的模板提供一个公共基类。为此,我创建了一个电子邮件基本模板,并使我的所有电子邮件模板都从中继承。像这样:
基本模板:
<#@ template language="C#" #>
派生模板:
<#@ template language="C#" inherits="BaseTemplate" #>
<#@ parameter name="Param" type="System.String" #>
Template! Param=<#= Param #>
请注意派生模板中的参数。如果存在,则会导致模板具有Initialize方法。并且,因为派生模板派生自基本模板,派生模板中Initialize方法的声明使用关键字“override”。但是,基本模板上没有Initialize方法。这会导致错误:
'Template.Initialize()': no suitable method found to override
我可以通过在基本模板中声明一个虚拟参数来解决这个问题:
<#@ template language="C#" #>
<#@ parameter name="DummyParam" type="System.String" #>
这导致在基本模板中生成Initialize方法,派生模板可以覆盖该方法。
我的问题是,我错过了什么吗?必须添加一个虚拟参数来安抚编译器,这看起来好像我做错了。