2009-04-30 4 views
0

入れ子になった列挙型でクラスを作成したいと思います。System.Reflection.Emitの入れ子になった列挙体

public class Foo 
{ 
    public enum Views 
    { 
    } 
} 

しかしSystem.Reflection.Emit.TypeBuilderクラスにはDefineNestedEnumのみDefinedNestedTypeを持っていません。 ModuleBuilder.DefineEnumは私に列挙型を作成させますが、入れ子にする方法はありません。列挙型を作成せずに(EnumBuilderを使用して)作成できますか?


解決策を以下のように変更しました。

答えて

2

私の答えを移動ここに質問を入れました。静的| |定数値を持つリテラルフィールド私は考えることができる


だけの事はSystem.Enumを拡張密封されたクラスとして、ネストされた型を定義し、国民を定義することです。これは本質的には、C#コンパイラが私がそれを逆アセンブルすることによって学んだことに基づいて実行しているものです。私がこれを行い、アセンブリを参照すると、Intellisenseはそれを列挙型として認識し、列挙型のように機能します。


これは、MSDNがJeremyがリンクしている方法とまったく同じです。

3

this articleの最後の例を参照してください。これはまさにあなたが望むものです。 (正しい引数でDefineNestedTypeを使用します)

+0

私の言ったこととどう違うのですか?定数値を持つフィールドを定義してSystem.Enumから継承する入れ子型です。 しかし、MSDNの例では、ネストされたenumを作成するための継承サポートがないことを示しているようです。 –

+0

ポイントは:それは入れ子になった列挙型です - 定数値を持つフィールドを定義するSystem.Enumから継承する入れ子型です。 MSDNサンプルが発行したアセンブリで生成されたものをリフレクターで調べ、ネストされた列挙型でC#クラスをコンパイルすることによって生成された入れ子になった列挙型と比較します。 – jlew

+0

もう一度、リンクしたMSDNの記事は、もともと私が質問に投稿した内容(および回答に移動した内容)とは異なっていますか? 私の質問は、enumを偽装する方法ではありません(私は明らかにそれをカバーしています)。 EnumBuilderはEnumBuilderの実際の内容をすべて網羅していますが、EnumBuilderを取得して入れ子にする方法はありません。 –

関連する問題