1

汎用属性クラスが与えられた場合:

public class Attribute<T>
{
  string Name { get; set; }
  T Value { get; set; }
}

そのジェネリックのさまざまなタイプ (int、string、datetime など) を含む列挙型を含むオブジェクトを持つ方法はありますか。

public class AttributableObject
{
  IEnumerable<???> attributes { get; set;}
}

分散の問題が発生しないようにする方法はありますか?

4

1 に答える 1

5

典型的なアプローチは、ジェネリック クラスを非ジェネリック基本クラス (またはインターフェイス) から派生させ、その型の列挙型を持たせることです。

public abstract class AttributeBase
{
    // Non-generic stuff here
}

public class Attribute<T> : AttributeBase
{
    // Generic stuff here
}

次に、次のように宣言できます。

IEnumerable<AttributeBase> attributes;

もちろん、一般的な機能 (実際に値を取得するなど) を使用する場合は、各要素の型を知る必要があります。

プロパティは設定可能で取得可能であるため、ここでは共変性/反変性は役に立たないことに注意してください。Valueしたがって、ジェネリックパラメーターは不変です(言うまでもなく、それはジェネリッククラスであるため、共変/反変にすることはできません) .)

于 2012-07-03T18:10:14.003 に答える