[英]Interface that implements all it realizations
我有界面:
public interface IPettable
{
void Pet();
}
我有兩個實現這個接口的類:
public class Cat : IPettable
{
public void Pet()
{
...
}
}
public class Dog : IPettable
{
public void Pet()
{
...
}
}
我希望第三個 IPettable 接口能夠兩次調用這兩種實現。 怎么做?
public class PetAllAnimals : IPettable
{
public void Pet()
{
dog.Pet();
cat.Pet();
}
}
您可以獲取所有實現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
and Dog
class的實例,然后在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();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.