簡體   English   中英

實現所有實現的接口

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM