0

Generices を次のように実装しました。

  public class GenericAnimal<T> 
  {
    public int legs;
    public void Walk()
    {
        Console.WriteLine("Animals Walk....");
    }
}

public class Dog 
{
    public void Bark()
    {
        Console.WriteLine("Barking....");
    }
}

public class Cat 
{
    public void Mew()
    {
        Console.WriteLine("Mewing....");
    }
}

次に、次のようにクラスを使用しています。

        GenericAnimal<Dog> dogObj = new GenericAnimal<Dog>();
        GenericAnimal<Cat> catObj = new GenericAnimal<Cat>(); 

dogObj と catObj の両方で、「Walk」メソッドを取得しています。これは、抽象クラスを使用して実行できます。では、Abstract クラスよりも Generics を使用する利点は何ですか?

4

5 に答える 5

5

あなたの場合、なし。ジェネリックは、コードをさまざまな型で再利用できるようにするシナリオで意味があります。ではGenericAnimal<T>、 で何もしていませんT

于 2012-06-25T06:26:37.960 に答える
1

あなたの特定の例は、ジェネリックを使用しない通常の継承によってより適切に解決されます-Dog と Cat のサブクラス Animal の両方。ただし、動物のリストが必要になったとします。一般的ではない解決策として、猫と犬のインスタンスを追加できる ArrayList を選択できます。ただし、ArrayList の Add メソッドはオブジェクトをパラメーターとして受け取ります。したがって、リストに魚を追加することもできますが、魚は歩くことができません。リストを処理してすべての動物に歩くように指示する場合、まずそれらが動物であることを確認する必要があります。

ここでジェネリックが役に立ちます。List<Animal> を使用してリストを定義すると、「is Animal」に準拠するオブジェクトのみをリストに追加できます。魚は動物ではないと仮定して、魚を追加しようとするとコンパイル エラーが発生します。さらに、リスト内のアイテムを取得すると、オブジェクトだけでなくアニマル インスタンスも取得されるため、すぐに歩くように指示できます。

于 2012-06-25T06:47:02.790 に答える
1

GenericsInheritanceは 2 つのまったく異なる概念であり、まったく異なる機能を持っています。「抽象クラスよりもジェネリックを使用することの追加の利点は何ですか?」というような比較はありません。その意味で、すべての子オブジェクトから共通の機能を抽象化できる場合は、 を使用するのが理にかなっていますAbstract classの詳細については、こちらをご覧くださいGenerics

于 2012-06-25T06:41:22.840 に答える
0

代わりにそれを書いてみてください:

public class Animal
{
  public int legs;
  public void Walk()
  {
      Console.WriteLine("Animals Walk....");
  }
}

public class Dog : Animal
{
   public void Bark()
    {
      Console.WriteLine("Barking....");
    }
}

public class Cat : Animal
{
   public void Mew()
   {
      Console.WriteLine("Mewing....");
   }
}

List<T>2 つのリストを作成してみてください。1 つ目は猫のみのリスト、2 つ目は犬のみのリストですList<T>。理解を深めるのに役立つと思います

于 2012-06-25T06:32:33.820 に答える
0

コードを次のように変更します

public class GenericAnimal<T> 
{
  public T Instance{get;set;}
  public int legs;
  public void Walk()
  {
      Console.WriteLine("Animals Walk....");
  }
}

そして、 と を使用できるようにDogなりCatます。しかし、eyossi は、そのような状況のためのより良いコードを説明しました。

于 2012-06-25T06:37:37.613 に答える