2012-02-01 6 views
0

.NETには、System.Typeを指定してソースコードクラス定義を作成する方法はありますか?System.Typeを指定してクラス定義のソースコードを生成しますか?

public class MyType 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 


string myTypeSourceCode = GetSourceCode(typeof(MyType)); 

基本的に私はGetSourceCode()が何であるかを探しています。

制限があることを認識しています。プロパティゲッター/セッターやプライベートメンバーがある場合、ソースは含まれていませんが、その必要はありません。型がデータ転送オブジェクトであると仮定して、publicプロパティ/フィールドだけを公開する必要があります。

私がこれを使用しているのは、Web APIの自動生成コードの例です。

+0

あなたは、サイドステップという問題を既存のを使用してILSpyのような逆コンパイラ。 – CodesInChaos

+1

しかし、すべてのプロパティを列挙し、getter/setterを持っていてその型を印刷するのが難しくないかどうかを調べます。 – CodesInChaos

答えて

5

あなたが示したような疑似インターフェイスコードを生成したいのであれば、タイプの場合

string GetSourceCode(Type t) 
{ 
    var sb = new StringBuilder(); 
    sb.AppendFormat("public class {0}\n{{\n", t.Name); 

    foreach (var field in t.GetFields()) 
    { 
     sb.AppendFormat(" public {0} {1};\n", 
      field.FieldType.Name, 
      field.Name); 
    } 

    foreach (var prop in t.GetProperties()) 
    { 
     sb.AppendFormat(" public {0} {1} {{{2}{3}}}\n", 
      prop.PropertyType.Name, 
      prop.Name, 
      prop.CanRead ? " get;" : "", 
      prop.CanWrite ? " set; " : " "); 
    } 

    sb.AppendLine("}"); 
    return sb.ToString(); 
} 

:公共分野このような&プロパティを超える反復

public class MyType 
{ 
    public int test; 
    public string Name { get; set; } 
    public int Age { get; set; } 
    public int ReadOnly { get { return 1; } } 
    public int SetOnly { set {} } 
} 

出力は次のとおりです。

public class MyType 
{ 
    public Int32 test; 
    public String Name { get; set; } 
    public Int32 Age { get; set; } 
    public Int32 ReadOnly { get; } 
    public Int32 SetOnly { set; } 
} 
関連する問題