2010-11-23 17 views
5

私はオブジェクトの記述子として使用しているクラスを持っています。その記述子には、そのオブジェクトに関連するさまざまな操作のためにインスタンス化されるクラスのための複数の参照があります。私はそれらの参照を引き出し、それらを記述子クラスの属性に置き換えることを考えていました。このことから属性の使い勝手の悪い/不適切な使用?

class MyDescriptor : BaseDescriptor { 
    public Type Op1Type { get; } 
    public Type Op2Type { get; } 
} 

これには:

[Op1(typeof(foo))] 
[Op2(typeof(bar))] 
class MyDescriptor : BaseDescriptor { 
} 

私は非常にまれな属性を使用していません。これは彼らの悪い使用と考えられるでしょうか?

+0

Genericsを代わりに使用することを考えましたか? – Lazarus

+0

1つの問題は、属性を使用する場合、パブリックインターフェイスにコンパイル時の型を知る必要があるということです。仮想メソッドを使用すると、コンパイル時に知られていない型を使用することができます。 – CodesInChaos

+0

派生クラスの操作数が異なる可能性があるので、静的な数の汎用パラメータを持つことはできません。 – redman

答えて

0

私はこれが属性の優れた使い方であると考えています。特に装飾するクラスをインスタンス化する前に、リフレクションを通して装飾するクラスをインスタンス化できるようにしたい場合は、属性を使用することには多くの利点がありますが、これは単なるものです。

あなたの意図にかかわらず、実装に問題はありません。

+0

これを行うにはまだDIがずっと優れています。 – Aliostad

0

私は個人的に時間をコンパイル依存性の注入代わりの種類自体への依存関係を焼くを使用します。

これは、コンストラクターまたは初期化でクラスの依存関係をインスタンス化することでこれを得ることができません。

依存性注入は、ダミースタブ/モックに置き換えることができるほか、実行時にそのような動作を変更することができます。

+0

私は最近の仕事でそれに晒されただけで、DIにはかなり新しいです。この場合、実装するのに十分なほど快適ではありませんが、私はそのテーマに関するいくつかの研究の出発点としてあなたの提案を使用します。 – redman

+0

これはあなたが探しているものです。 Unity、Castle、StructureMapなどを使用して実装するのは非常に簡単です。 – Aliostad

0

属性の使用方法に問題はありませんが、得られたメリットはありません。多分もっと多くの情報を共有すれば、解決策を考え出す方が簡単かもしれません。

+0

真実ですが、コーディングの観点から明らかなメリットはありません。私が達成しようとしている利益は、大会の観点からです。 – redman

0

どのようなタイプのハッシュアルゴリズムプロバイダを使用するかを指定する場合は、このように使用します。

子クラスは親クラスによって読み取られる属性を持ち、その型のインスタンスを作成します。

0

属性は、ソースコードでこれを表現するのはかなりエレガントな方法ですが、実行時のパフォーマンスは悲惨です。

おそらくDictionary<Type, Type>を使用して、検索を高速化するために実行時にキャッシュを構築したいと思うでしょう。

関連する問題