0

こんにちは、関連する型のために、クラスの設定に問題があります。アイデアは次のとおりです。

クラスAには、クラスBのインスタンスで埋められるはずのプライベート配列リストがあります。したがって、クラスAのインスタンスには、クラスB要素のオンArrayListがあります。クラス A には、その ArrayList に B の新しいインスタンスを追加する関数があります。具体的には、A.Add 内で、新しい B がインスタンス化され、初期化されてから、ArrayList に追加されます。クラス B は非常に単純なクラスです。1 つの列挙型 Type が含まれており、外部オブジェクト/クラスなどへの参照も含まれている必要があります。* appleClass、peachClass、lemonClass * というクラスがあり、classB がフルーツクラス、クラス A がフルーツバスケットであるとします。メインコードが果物を見るたびに、クラス A にそれをバスケットに追加するように要求する必要があります。つまり、 A.add( thisfruit) ですが、この果物は果物クラスのいずれかである可能性があります。つまり、classB をインスタンス化し、それを A.arraylist に追加するには、ジェネリック シグネチャが必要です。意味があるかどうかはわかりませんが、問題を説明するコードをいくつか提供しようとします。

class Lemon
{
    //....
}
class Apple
{
    //....
}
class Peach
{
    //....
}

class Fruit
{
    public int color;
    <T> fruit;///this should be the <T> type depending on the fruit class i am adding
    public Fruit(T f, int c){fruit = f; color = c;}
}

class Basket
{
    ArrayList FruitArray= new ArrayList();
    public void AddFruit<T>(T f,int c )
    {
        fru = new Fruit(f,c);
        FruitArray.Add(fru);
    }
}

テンプレートをどのように使用すればよいですか?? 上記のコードが間違っていることはわかっていますが、これをどのように行うのが最善かわかりません。

ありがとうございました

アレックス

EDIT ご回答いただきありがとうございます。それらはすべて基本/抽象クラス Fruit の使用を指しているようで、そこから特定の果物を派生させます。申し訳ありませんが、私の実際のプロジェクトには果物が含まれていません。簡単にするために果物を使用しただけです。実際のプロジェクトはUnityにあり、「果物」のいくつかは Unity クラスから来ています。他のいくつかの「果物」は私自身のクラスです。これは、Unity の名前空間に由来するクラスの親クラスを宣言できないことを意味します。私は、古き良き C の void ポインターである "fruit" への一般的な参照を持つことができることをもっと望んでいました。 「不明な」オブジェクトへの参照をクラス/関数に渡し、後でそれを使用/解決する方法...

4

4 に答える 4

0

C# では、コンパイル時に毎回生成されないため、テンプレート メソッドではなくジェネリック メソッドと呼ばれます。

あなたの例については:

class Lemon : Fruit
{
    public Lemon(int c = 0) : base(c){}
    //....
}
class Apple : Fruit
{
    public Apple (int c = 0) : base(c){}
    //....
}
class Peach : Fruit
{
    public Peach (int c = 0) : base(c){}
    //....
}

class Fruit
{
    public int color;
    public Fruit(int c){ color = c; }
}

class Basket
{
    List<Fruit> fruits = new List<Fruit>();

    public void AddFruit(Fruit f)
    {
        fruits.Add(f);
    }

    public void CreateFruit<T>(int c) : where T : Fruit
    {
        Fruit f = Activator.CreateInstance<T>() as Fruit;
        f.color = c;
        fruits.Add(f);
    }
}
于 2014-02-08T13:45:12.477 に答える