.NET Clips - Reflectionのタグがつけられたエントリー
1
CLIPS

名前で動的にプロパティにアクセスする

2686日前に更新 aoki1210aoki1210 2687日前に登録
2010年09月08日 GMT 2010年09月07日 GMT
下の例の2行目のようにプロパティ名で任意のオブジェクトのプロパティに「簡単に」アクセスしたいと思いました。 var value1 = hoge.Aaa; var value2 = hoge["Aaa"]; Assert.AreEqual(value1, value2); 最初、dynamicを使えばすぐできるのかと思ったら無理でした(hogeをdynamicにしてhoge["Aaa"]としたらインデクサにアクセスしてしまいます)。[]でなくていいから、dynamicと組み合わせて名前でプロパティにアクセスできる構文があればいいのにと思います。 代替案としてはラッパーを作ることかなぁ。たとえばこんなクラスを作ります。publicclass InstancePropertyAccessor { privatereadonlyobject _instance; privatereadonly Type _type; public InstancePropertyAccessor(object instance... (詳細)
カテゴリー: プログラム(C#/VB/C++/F#/PS/Iron..) | クリック数: 11 | コメント | | ソースサイト: d.hatena.ne.jp
タグ: C#, Reflection
1
CLIPS

動的コード生成のパフォーマンス (C# によるプログラミング入門)

2701日前に更新 aoki1210aoki1210 2711日前に登録
2010年08月24日 GMT 2010年08月15日 GMT
概要 .NET Framework のバージョンが上がるたびに色々と追加され、 今や、動的コード生成にもさまざまなやり方が。 ということで、並べて比較してみたいと思います。 「動的 = リフレクション = むちゃくちゃ遅い」というイメージをもたれる方も多いと思いますが、 実際のところ、1度生成したコードをキャッシュしておくなどの工夫をすれば、意外と許容範囲なパフォーマンスが得られます。 (GUI の描画部分やネットワーク通信部分の遅延と比べれば、演算部分の数倍程度の差は取るに足らない場合が多く、 過剰に気にする必要はありません(もちろん、状況次第)。) 比較コード含めたソースコード一式: DynamicPerformance.zip ポイント * 毎回リフレクションを呼び出すのはやっぱりかなり(2~3桁)遅い。 * キャッシュ機構を使えば、静的なコードの数倍程度までは速くできる。 * C# 4.0 の dynamic は適切にキャッシュしてくれているので、十分速い。 (詳細)
カテゴリー: プログラム(C#/VB/C++/F#/PS/Iron..) | クリック数: 29 | コメント | | ソースサイト: ufcpp.net
タグ: C#, Dynamic, Reflection
2
CLIPS

静的リフレクションとは?

2714日前に更新 aoki1210aoki1210 2716日前に登録
2010年08月12日 GMT 2010年08月09日 GMT
静的リフレクション(Static Reflection)とは、やや新しい実装テクニックのひとつであり、型やメンバを指示する情報の内でコンパイラが識別可能なもののみを用いて型やメンバの情報にアクセスする方法である。通常は指示情報としてメンバアクセスを行うラムダ式が用いられるので、「ラムダ式を用いてメンバの型情報にアクセスする方法」と理解しておく方が実用的かもしれない。 リフレクションにおける静的・動的の区別をはっきりさせるために簡単な例から始めることにする。 interface X { string MyProperty { get; set; } } class Y : X { public string MyProperty { get; set; } } ・・・ X p = new Y(); Type t1 = p.GetType(); Type t2 = typeof(X); とある場合に、p.GetType()で得られる型情報は、実行時にpに具体的に何が代入されているかに依存しているという意味で動的である。 これに対しtypeo... (詳細)
カテゴリー: アーキテクチャ/デザイン/OSS | クリック数: 32 | コメント | | ソースサイト: d.hatena.ne.jp
タグ: C#, Reflection