2009-05-14 8 views
3

Je trouve souvent que j'écris un cours semblable au suivant (mais avec un nombre variable de membres, de types de membres, etc.). Est-il possible de le faire automatiquement, facilement et gratuitement? Donc je voudrais fournir les paramètres "Foo", "int", "pommes", "bool", "banane", "Bar", et "clémentine" et avoir le reste du code généré pour moi.Générer automatiquement la classe C#

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

Répondre

3

Si vous effectuez une mise à niveau vers C# 3.5, vous pouvez réduire la quantité d'écriture à effectuer.

Par exemple, vous pouvez simplement faire ceci:

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

Ou bien, vous pouvez toujours le constructeur, mais vous ne devez pas ajouter tous les champs privés. C'est assez rapide pour taper et accélérer avec des extraits de code ou resharper. Un inconvénient est que, comme cela, vous ne pouvez pas valider votre entrée de paramètre sans plus de code. Cela dépend de la nature de qui consommeront vos classes et combien il est important que int Apples est explicitement défini plutôt que 0.

5

Jetez un oeil à . Il est inclus avec VS2005 et versions ultérieures.

1

Vous pouvez utiliser les propriétés automatiques si:

public Bar Clementine 
    { 
     get; 
     set; 
    } 

qui au moins vous économiser quelques secondes.

Aussi, vous devriez acheter resharper - Je sais que vous avez dit libre, mais il est fondamentalement libre une fois que vous réalisez combien de temps il vous permet d'économiser.

1

Cela peut être fait avec des classes dans System.CodeDom. Voir l'aide pour CodeDomProvider pour un exemple. Je l'ai utilisé pour créer une énumération gérée avec l'attribut flags basé sur une énumération IDL définie dans une bibliothèque de types.

2

Vous pouvez également utiliser les extraits C# qui facilitent le processus de création de code, tels que prop, ctor, propdp, prope. Quoi qu'il en soit, voici une liste, cela pourrait aider.

C# Snippets

+0

Est-ce que les snippets vont me permettre d'avoir un nombre variable de membres? Parfois, je pourrais vouloir 3 membres, mais d'autres fois je pourrais vouloir 2 ou 4 ou 6. –

+0

Eh bien, si vous utilisez C# 2.0, l'extrait de prop ajoutera la propriété et son membre, quelque chose comme: chaîne privée _member; public string Membre {get {return _member; } set {_member = valeur; }} – Carlo

+0

Vous pouvez avoir un nombre variable de membres en utilisant un extrait un nombre variable de fois. –

1

L'outil XSD peut le faire pour vous. Écrivez simplement un schéma représentant votre objet, et XSD générera les classes correspondantes.

0

Pour l'exemple que vous fournissez, les suivantes seraient fonctionnellement équivalentes:

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

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

Il est difficile de suggérer une meilleure alternative sans savoir quel problème vous cherchez à résoudre. Quel genre d'objets sont-ils? Messages? Représentations d'exécution des fichiers de données?

Vous pouvez envisager d'autres représentations comme des tuples ou des tableaux bruts.

+0

J'ai le sentiment que ce n'est pas fonctionnellement équivalent.Si vous passez une instance de ma classe à une grille de propriétés, les 3 propriétés apparaissent dans la grille, mais si vous passez une instance de votre classe à la grille de propriété, vous ne verrez aucune propriété car les propriétés et les champs publics ne sont pas la même chose ... je pense. –

Questions connexes