基本クラスからすべて継承するオブジェクトのコレクションがあるとします。何かのようなもの...
abstract public class Animal
{
}
public class Dog :Animal
{
}
class Monkey : Animal
{
}
今、私たちはこれらの動物に餌をやる必要がありますが、彼らは自分自身を養う方法を知ることは許されていません. 可能であれば、答えは簡単です。
foreach( Animal a in myAnimals )
{
a.feed();
}
しかし、彼らは自分自身を養う方法を知ることができないので、次のようなことをしたいと考えています:
class Program
{
static void Main(string[] args)
{
List<Animal> myAnimals = new List<Animal>();
myAnimals.Add(new Monkey());
myAnimals.Add(new Dog());
foreach (Animal a in myAnimals)
{
Program.FeedAnimal(a);
}
}
void FeedAnimal(Monkey m) {
Console.WriteLine("Fed a monkey.");
}
void FeedAnimal(Dog d)
{
Console.WriteLine("Fed a dog.");
}
}
もちろん、ダウンキャストを強制するため、これはコンパイルされません。
この問題を解決するのに役立つジェネリックを使用した設計パターンまたはその他のソリューションがあるように感じますが、まだ指を置いていません。
提案?