はい、その場合、基本クラスを使用できます。
public class Pet
{
public int Id { get; set; }
public string Name { get; set; }
public void Run() { }
}
public class Cat: Pet
{
public string Meow()
{
return "Meow";
}
}
public class Dog :Pet
{
public string Bark()
{
return "Whow";
}
}
ただし、両方のクラスのインスタンスを 1 つのコレクションに配置すると、基本クラスのメンバーにしかアクセスできないことに注意してください。したがって、このコードは有効です:
var collection = new ObservableCollection<Pet> {new Cat(), new Dog()};
foreach (var pet in collection)
{
pet.Run();
}
ただし、明示的なキャストを使用しない限り、メソッド Meow() および Bark() を使用することはできません。
基本クラスに移動するメンバーが多すぎる場合は注意してください。上記の例では、Meow() は Dog には意味がなく、Bark() は Cat には意味がありません。派生クラスに固有のメソッドを使用する必要がある場合は、次の方法で型を確認できます。
pet.GetType()
次に、オブジェクトを派生型にキャストします。
var cat = (Cat)pet;
cat.Meow();