从另一个类调用类的所有子方法

时间:2017-08-15 01:39:23

标签: c# inheritance methods multiple-inheritance

让我们说我有一个"计时器"使用每1秒钟调用一次方法的类,并调用类中的另一个方法" Gear":

public class Timer
{
    public void OnTick()
    {
        Gear.Update();
    }
}

public class Gear
{
    public static void Update() { }
}

这种方法有效,但它只在基类上调用。 方法"更新"应该在#34; Gear"的所有孩子中召唤: e.g:

public class AnotherClass : Gear
{
    public override void Update() { // do stuff }
}
public class YetAnotherClass : Gear
{
    public override void Update() { // do stuff }
}
public class AndAnotherClass : Gear
{
    public override void Update() { // do stuff }
}

我该怎么做?

1 个答案:

答案 0 :(得分:3)

为了让代码按照你想要的方式工作,你需要做这样的事情(我会担心内存泄漏):

public abstract class Gear
{
    readonly static List<Gear> gears = new List<Gear>();

    public Gear()
    {
        gears.Add(this);
    }

    public static void Update()
    {
        foreach (var gear in gears)
            gear._Update();
    }

    protected abstract void _Update();
}


public sealed class Gear1 :  Gear
{
    protected override void _Update()
    {
        //do stuff
    }
}

public sealed class Gear2 : Gear
{
    protected override void _Update()
    {
        //do stuff
    }
}

public sealed class Gear3 : Gear
{
    protected override void _Update()
    {
        //do stuff
    }
}


public static void Main(string[] args)
{
    var timer = 
          new Timer(o => Gear.Update(), null, 0, SOME_INTERVAL);                       
}

但是,通过这样定义基本情况,可能会更好:

public abstract class Gear
{
    public abstract void Update();
}

然后定义一个集合类:

public sealed class GearCollection : List<Gear>
{        
    public void Update()
    {
        foreach (var gear in this)
            gear.Update();
    }
}

然后

public static void Main(string[] args)
{
    var gears = new GearCollection();

    //add gear instancs to gears

    var timer = new Timer(o => gears.Update(), null, 0, SOME_INTERVAL);            
}