2009-05-14 5 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() }; 

をまたは:

たとえば、あなただけのこの操作を行うことができます。コードスニペットやresharperを使用すると、入力したほうが素早く簡単です。欠点は、このように、コードを入力せずにパラメータの入力を検証できないことです。それは一種のそれがリンゴint型を明示的に指定した例だけで0

5

をご覧ください。これはVS2005以降に含まれています。

1

あなたはとても自動プロパティを使用することができます。少なくともあなたにいくつかの入力を救う

public Bar Clementine 
    { 
     get; 
     set; 
    } 

を。

また、あなたはresharperを購入する必要があります - 私はあなたが無料と言ったことを知っていますが、あなたがどれくらいの時間を節約するのか分かると基本的に無料です。

1

これはSystem.CodeDomのクラスで行うことができます。例については、CodeDomProviderのヘルプを参照してください。私は型ライブラリに定義されたIDL列挙型に基づいてflags属性を持つマネージenumを作成するために使用しました。

2

prop、ctor、propdp、propeのように、コードを簡単に作成できるプロセスを作成するC#スニペットを使用することもできます。とにかくここにリストがあります、これは助けるかもしれません。

C# Snippets

+0

スニペットを使用すると、メンバー数が変わることはありますか?時々私は3人のメンバーを望むかもしれませんが、他の時は2人か4人か6人かもしれません。 –

+0

C#2.0を使っているなら、小道具はそのプロパティとそのメンバーを追加します:private string _member; public stringメンバ{get {return _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つのプロパティがグリッドに表示されますが、クラスのインスタンスをプロパティグリッドに渡すと、プロパティとパブリックフィールドが表示されないため、プロパティは表示されません同じ...私は思う。 –

関連する問題