2009-05-14 3 views
3

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

Поэтому я хотел бы предоставить параметры «Foo», «int», «apples», «bool», «banana», «Bar» и «clementine» и оставить для меня остальную часть кода.

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; 
} 

ответ

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() }; 

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

5

Посмотрите на . Он включен в VS2005 и далее.

1

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

public Bar Clementine 
    { 
     get; 
     set; 
    } 

, что, по крайней мере, вам сэкономить некоторое печатать.

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

1

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

2

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

C# Snippets

+0

Будут ли фрагменты позволять мне иметь переменное количество членов? Иногда мне может понадобиться 3 участника, но в других случаях мне может понадобиться 2 или 4 или 6. –

+0

Ну, если вы используете C# 2.0, фрагмент prop добавит свойство и его член, что-то вроде: private string _member; public string Member {get {return _member; } set {_member = значение; }} – Carlo

+0

Вы можете иметь переменное число членов, используя фрагмент переменной числа раз. –

1

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

0

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

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

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

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

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

+0

У меня такое ощущение, что это не функционально эквивалентно.Если вы передадите экземпляр моего класса в сетку свойств, 3 свойства появятся в сетке, но если вы передадите экземпляр вашего класса в сетку свойств, вы не увидите никаких свойств, потому что свойства и общедоступные поля не являются то же ... думаю. –

Смежные вопросы