自动生成c#类

时间:2009-05-14 21:35:08

标签: c# code-generation

我经常发现我正在写一个类似于以下的类(但是有不同数量的成员,成员类型等)。是否可以自动,轻松,免费地完成这项工作?

所以我想提供参数“Foo”,“int”,“apples”,“bool”,“banana”,“Bar”和“clementine”,并为我生成其余代码。< / p>

public class Foo
{
   public Foo(int apples, bool banana, Bar clementine)
   {
      m_Apples = apples;
      m_Banana = banana;
      m_Clementine = clementine;
   }

   public int Apples
   {
      get { return m_Apples; }
      set { m_Apples = value; }
   }

   public bool Banana
   {
      get { return m_Banana; }
      set { m_Banana = value; }
   }

   public Bar Clementine
   {
      get { return m_Clementine; }
      set { m_Clementine = value; }
   }

   private int m_Apples;
   private bool m_Banana;
   private Bar m_Clementine;
}

7 个答案:

答案 0 :(得分:5)

看看T4 Engine。它包含在VS2005之后。

答案 1 :(得分:3)

如果您升级到C#3.5,则可以缩短您需要的写作量。

例如,你可以这样做:

public class Foo
{
  public int Apples { get; set; }
  public bool Banana { get; set; }
  public Bar Clementine { get; set; }
}

var myFoo = new Foo { Apples = 1, Banana = true, Clementine = new Bar() };

或者,您仍然可以使用构造函数,但不必添加所有私有字段。使用代码snippits或resharper可以快速输入和快速输入。缺点是,如果没有更多代码,您无法验证参数输入。这取决于谁将消耗你的类,以及int Apples是明确设置而不仅仅是0的重要性。

答案 2 :(得分:2)

您还可以使用C#片段,这样可以非常轻松地创建代码,例如prop,ctor,propdp,prope。无论如何这里是一个列表,这可能会有所帮助。

C# Snippets

答案 3 :(得分:1)

您可以使用自动属性:

   public Bar Clementine
   {
      get;
      set;
   }

这至少会为你节省一些打字。

另外你应该购买resharper - 我知道你说是免费的,但是一旦你意识到你节省了多少时间它就基本上是免费的。

答案 4 :(得分:1)

这可以使用System.CodeDom中的类来完成。有关示例,请参阅CodeDomProvider的帮助。我使用它来创建一个带有flags属性的托管枚举,该属性基于类型库中定义的IDL枚举。

答案 5 :(得分:1)

XSD工具可以为您完成此操作。只需编写一个表示对象的模式,XSD就会生成相应的类。

答案 6 :(得分:0)

对于您提供的示例,以下内容在功能上是等效的:

public class Foo {
    public int Apples;
    public bool Banana;
    public Bar Clementine;
}

new Foo { Apples = 1, Banana = false, Clementine = new Bar() };

如果不知道你想要解决什么问题,很难提出更好的选择。这些是什么样的物体?消息?数据文件的运行时表示?

您可能需要考虑替代表示,如元组或原始数组。