如果你真的想走这条路?代码生成将起作用。
http://msdn.microsoft.com/en-us/library/vstudio/bb126445.aspx
Microsoft 已将 T4 模板语言嵌入到 Visual Studio 中。这种模板语言允许快速简便地生成样板代码。虽然系统本身是原始的、笨拙的并且通常令人沮丧,但它允许您使用您喜欢的任何方法生成代码。
为了做基础,你需要创建一个模板文件来描述你的可重用代码和逻辑。
例如,我们可以有一个看起来像这样的 TemplatedFields.Include.tt 文件
<# // myFields and myClassName must be defined before importing this template #>
<# // stuff in these braces will not appear in the outputted file, but are executed by the templating engine #>
//this code is outside of the braces and will appear in the file1
public partial class <#= myClassName #> //notice the equals sign. Works like webforms.
{
<# ForEach(var field in myFields) { #>
private string _<#= field.Name #> = null;
public string <#= CapitalizeFirstLetter(field.Name) #>
{
get
{
_<#= field.Name #> = GetLang(<#= field.FirstParam #>, "<#= field.SecondParam #>");
return _<#= field.Name #>;
}
set
{
if (object.Equals(value, _<#= field.Name #>))
return;
SetLang(<#= field.FirstParam #>, "<#= field.SecondParam #>", value);
OnPropertyChanged();
}
}
<# } #>
}
然后对于你的定义......好吧,假设这是 Person.cs
人.模板.tt
<#@ output extension=".cs" #>
//stuff inside the angle braces is sent to the TT engine and does not appear in the file.
<#
var myClassName = "Person";
var myFields = new List<Field>()
{
new Field {Name="Description", FirstParam="this.TabAccountLangs", SecondParam="TextAccount"),
new Field {Name="Name", FirstParam="this.TabAccountLangs", SecondParam="TextAccount"),
new Field {Name="MoarFieldzzzz", FirstParam="this.TabAccountLangs", SecondParam="TextAccount"),
}
#>
//included code is appears below, now that values have been set above.
<#@ include file="TemplatedFields.Include.tt" #>
保存上述文件会自动生成 Person.Templated.cs。我不记得你是否需要一个指令来确保 VS 会编译生成的 CS 文件,但我很确定它默认会编译。
我将 CapitalizeFirstLetter 的实现和 Field 的定义留给读者。当然,这是一种异常粗略的方法——使用 t4 构建框架的方式要结构化和智能得多。
由于该类是部分类,因此您可以在第二个 Person.cs 文件中提供更具体的手工编码逻辑。
Oleg Sych 使 t4toolbox 使大型、复杂的 T4 项目变得更容易,但我警告你:T4 是一条通往疯狂的道路。