Автоматически генерировать класс C # - PullRequest
3 голосов
/ 15 мая 2009

Я часто нахожу, что пишу класс, подобный следующему (но с различным числом участников, типами участников и т. Д.). Можно ли сделать это автоматически, легко и бесплатно?

Итак, я хотел бы предоставить параметры "Foo", "int", "apple", "bool", "banana", "Bar" и "clementine", а также сгенерировать остальную часть кода для меня. 1003 *

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 ]

5 голосов
/ 15 мая 2009

Взгляните на T4 Engine . Он включен в VS2005 и далее.

3 голосов
/ 15 мая 2009

Если вы обновитесь до 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() };

Или, у вас все еще может быть конструктор, но вам не нужно добавлять все приватные поля. Это довольно быстро набирать и быстрее с фрагментами кода или резче. Недостатком является то, что вы не можете проверить ввод параметров без дополнительного кода. Это зависит от того, кто будет использовать ваши классы, и насколько важно, чтобы int Apples был явно установлен, а не просто 0.

2 голосов
/ 15 мая 2009

Вы также можете использовать фрагменты C #, которые делают процесс создания кода очень простым, например prop, ctor, propdp, prope. В любом случае, вот список, это может помочь.

C # Snippets

1 голос
/ 15 мая 2009

Инструмент XSD может сделать это за вас. Просто напишите схему, представляющую ваш объект, и XSD сгенерирует соответствующие классы.

1 голос
/ 15 мая 2009

Это можно сделать с помощью классов в System.CodeDom. См. Справку для CodeDomProvider для примера. Я использовал его для создания управляемого перечисления с атрибутом flags на основе перечисления IDL, определенного в библиотеке типов.

1 голос
/ 15 мая 2009

Вы можете использовать Автоматические свойства так:

   public Bar Clementine
   {
      get;
      set;
   }

это, по крайней мере, спасет вас от набора текста.

Также вы должны купить resharper - я знаю, что вы сказали, что бесплатно, но это в основном бесплатно, как только вы понимаете, сколько времени это спасает вас.

0 голосов
/ 15 мая 2009

Для приведенного вами примера следующее будет функционально эквивалентно:

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

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

Трудно предложить лучшую альтернативу, не зная, какую проблему вы хотите решить. Что это за объекты? Сообщения? Представления файлов данных во время выполнения?

Возможно, вы захотите рассмотреть альтернативные представления, такие как кортежи или необработанные массивы.

...