Как вызвать метод у всех детей класса в C #? - PullRequest
0 голосов
/ 07 июля 2019

У меня есть родительский класс и несколько дочерних классов. Я хочу вызвать метод в родительском классе, и он будет выполняться во всех дочерних классах, не обращаясь к ним отдельно.

Примерно так:

public class Parent
{
public static void SomeMethod(){}
}
//certain amount of child classes
public void MainMethod(){
Parent.SomeMethod(); //Gets executed in all children
}

1 Ответ

0 голосов
/ 08 июля 2019

Из того, что я понял из вашего вопроса, вам нужно, чтобы классы child имели доступ к той же функции, что и родитель. Среди других вариантов, я думаю, вы можете использовать абстрактный класс для обработки этого. Просто вызовите метод один раз в родительском классе, другие дочерние классы также сделают это. Кроме того, он гибкий, учитывая возможность переопределения метода в дочерних классах, если возникнет такая необходимость. См. ChildB реализацию.

Образец.

public abstract class FamilyBase
{
    public virtual void DoChores(FamilyBase member)
    {
        Console.WriteLine("Doing Chores by: "+member);
    }
}
public class Parent: FamilyBase
{
    public Parent()
    {

    }
    private List<FamilyBase> family=new List<FamilyBase>();

    public void AddMember(FamilyBase member)
    {
        family.Add(member);
    }
    //send out chores
    public void SendOutMessages()
    {
      if(family.Count>0)
      {
          foreach(var member in family)
          {
              member.DoChores(member);
          }
      }
    }
}
public class ChildA:FamilyBase
{
    public ChildA()
    {

    }
}
public class ChildB:FamilyBase
{
    public ChildB()
    {

    }
    public override void DoChores(FamilyBase member)
    {
        Console.WriteLine("I'm doing my homework first.");
        base.DoChores(member);
    }
}

Отправка сообщений от родителя.

Parent par=new Parent();
parent.AddMember(new ChildA());
parent.AddMember(new ChildB());
parent.SendOutMessages();

Выход:

Doing Chores by : Parent
Doing Chores by : ChildA
I'm doing my homework first.
Doing Chores by : ChildB
...