Вы можете получить все классы, которые реализуют интерфейс IPettable
и вызывают метод Pet()
. как это
public class PetAllAnimals : IPettable
{
public void Pet()
{
var ipettableType = typeof(IPettable);
var types = Assembly.GetExecutingAssembly().GetExportedTypes()
.Where(a => !a.IsInterface &&
ipettableType.IsAssignableFrom(a) &&
a.GetTypeInfo() != typeof(PetAllAnimals).GetTypeInfo());
foreach (var item in types)
{
IPettable instance = (IPettable)Activator.CreateInstance(item);
instance.Pet();
}
}
}
Другой способ - создать экземпляр класса Cat
и Dog
, затем инициализировать поля в constructor
и вызвать Pet()
метод
public class PetAllAnimals : IPettable
{
private readonly IPettable dog;
private readonly IPettable cat;
public PetAllAnimals()
{
cat = new Cat();
dog = new Dog();
}
public void Pet()
{
dog.Pet();
cat.Pet();
}
}