2011-01-27 10 views

答えて

1

リフレクションと(オプションで)動的IL生成を使用して行うことができます。例えば

あなたがタイプ(すなわちSystem.Typeインスタンスを持っている)を知っていれば、あなたはすべてのフィールド(type.GetFields()リターンFieldInfoオブジェクトのリスト)を列挙して、フィールドの値を取得するためにGetValueメソッドを使用することができます。これは、セキュリティ信頼レベルチェックがパスされている限り、プライベートフィールドで動作します。

これはあまり速くないので、フィールドアクセスコードをプリコンパイルしたい場合があります(プロファイラが指示した後にのみ行います)。この場合、System.Reflection.EmitDynamicMethodの機能を使用できます。 (チュートリアルはGoogleとMSDNで見つけることができますが、C#/ F#で行う必要がある機能をコンパイルし、Reflector/ildasmでMSILの出力を調べると便利です)。

+0

コンパイル時と実行時にMSILコードを発行/カスタマイズ/操作する良い本はありますか? – geeko

+0

何かがあるかどうかわかりません。 MSDNのdocsとReflectorを使用すると、発光が多かれ少なかれ簡単になります。唯一の問題は、MSILが正しくない場合(スタックの不均衡や不適切なタイプなど)、詳細な説明がなく、「何かが間違っている」という例外があるため、二重と三重にチェックして推測する必要があるということです。だから私はいくつかのコードを書くことをお勧めしたい - あなたはすぐに書籍なしでそれを得るだろう、と思う。 – zeuxcg

1

実際は簡単です。バイナリデータ(シリアル化されていないオブジェクトではなく、生のバイナリデータ)を読み込みたい場合は、BinaryReaderを使用できます。

関連する問題