从模板自动生成C#代码

时间:2019-06-04 00:59:06

标签: c# templates auto-generate

我现在正在用C#维护其他人的代码,但是我发现不确定自己是否理解某些内容。我非常感谢有人指出我正确的方向。

到目前为止,当我编写winforms时,我通常会编写我的类(和其他代码)。但是,在此程序中,有些模块具有部分类,并且标头中的注释形式为

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated from a template.
//
//     Manual changes to this file may cause unexpected behavior in your application.
//     Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

这到底是什么?他们在说什么模板

(*)这不是在某人以图形方式设计表单时生成的自动生成的部分类。我已经看到并使用了那些。我想这是相似但不一样的

1 个答案:

答案 0 :(得分:0)

问题下方的注释为您在特定情况下指明了正确的方向,但有趣的是,在处理带有自动生成的代码的项目时,通常最好的做法是什么,希望该代码可以这样标记。评论。

这样的注释告诉您这不是实际的 source 代码,而是从另一个 source 转译/生成的代码。实际上,最好不要直接对其进行修改,因为生成代码的过程(很可能是构建的一部分或使用工具)可能会通过覆盖文件而放弃更改。一种考虑的方式是,它有点像是由编译器生成的二进制文件(更正确的术语是中间语言)。在这种情况下同样适用,修改二进制文件会适得其反,容易出错,并且更改将被实际的编译过程丢弃。

此外,这类代码通常遵循严格的约定,并且如果严格遵守这些约定,则预期它们会起作用。要记住的一件事是,通常这种自动生成的代码是 dumb 代码,最好将其留给要生成的工具。

我不时编写工具来自动生成代码,这对于粘合代码(映射到数据库,序列化等)非常有用。自动生成的测试等。 我记得在实际的生产代码中使用过的一个特定示例是 stubbing 。我们有一个wpf客户端,该客户端充满了空引用异常。我的团队花了太多时间根据具体情况进行修复,但是更多的时间一直在出现。在某个时候,我实现了一个可配置的工具,该工具将生成可修补数据模型的代码,从而将默认存根对象替换为空引用。