1

私はこのサンプルの一般的なコードを持っています:

public class Box<E> where E : BoxProperties{
}

public class BoxProperties{
}

public class BlueBox : Box<BlueBox.BlueProperties >{
    public class BlueProperties : Properties{
    }
}

public class RedBox : Box<RedBox.RedProperties >{
    public class RedProperties : Properties{
    }
}

RedBox と BlueBox を値として格納できる Dictionary を作成する必要があります。何か助けてください。

4

3 に答える 3

3

あなたが説明したタイプでは、BlueBoxとの間の最も近い共通の祖先タイプRedBoxSystem.Object. を使用するDictionary<TKey, object>か、他の共通の祖先型を導入する必要があります。

于 2013-09-11T17:12:50.940 に答える
2

あなたはこのようなことをすることができます -

public class BoxProperties
{
}
interface IBox
{

}

public class Box<E> : IBox where E : BoxProperties
{
}

public class BlueBox : Box<BlueBox.BlueProperties>
{
    public class BlueProperties : BoxProperties
    {
    }
}

public class Properties
{
}

public class RedBox : Box<RedBox.RedProperties>
{
    public class RedProperties : BoxProperties
    {
    }
}

これであなたはできるようになります -

        var dictionary = new Dictionary<string, IBox>();
        dictionary.Add("a", new BlueBox());
        dictionary.Add("b", new RedBox());
于 2013-09-11T17:25:24.007 に答える
2

どのクラスかにもよると思うBox<E>

interface IBox<out E> where E : BoxProperties
{
}

public class Box<E> : IBox<E> where E : BoxProperties
{
}

public class BoxProperties
{
}

public class BlueBox : Box<BlueBox.BlueProperties>
{
    public class BlueProperties : BoxProperties
    {
    }
}

public class RedBox : Box<RedBox.RedProperties>
{
    public class RedProperties : BoxProperties
    {
    }
}

これにより、次のような辞書を宣言できます。

var dic = new Dictionary<string, IBox<BoxProperties>>();

dic.Add("red", new RedBox());
dic.Add("blue", new BlueBox());

しかし、これoutはあなたにとって最善ではありません。これを見てください

于 2013-09-11T17:22:38.877 に答える