当在派生类中调用抽象方法时,从抽象类调用方法

时间:2014-05-17 13:22:00

标签: c# xna listener

我正在使用自定义控件设置在XNA中创建用户界面。我有一个名为Clickable的基本抽象类,它包含在各种动作发生时运行的方法,即; OnClickOnRelease

我试图在其中实现侦听器,我使用以下两种方法来实现:

public void RegisterClickListener(Action<Vector2> ClickMethod)
{
    listners.Add(ClickMethod);
}

public void OnClickMethod(Vector2 pos)
{
    foreach (Action<Vector2> func in listners)
        func(pos);
}

RegisterClickListener将参数中传递的方法添加到OnClickMethod方法触发时要调用的方法列表中。 OnClickMethod只是遍历列表并调用每个方法。

每次调用抽象方法OnClickMethod(下)时,我都需要一种能够调用OnClick的方法。目前,我每次使用OnClickMethod时都必须手动调用OnClick,这是不理想的。

 public abstract void OnClick(Vector2 pos);

有什么方法可以在保持OnClick抽象的同时做到这一点?或者我每次使用它时都必须摘下摘要并打电话给基地?

1 个答案:

答案 0 :(得分:2)

您正在寻找Template method pattern。创建一个充当模板的方法(按固定顺序执行一些步骤),然后给客户端选项仅覆盖它的一小部分。

public void OnClick(Vector2 pos)
{
    OnClickCore(pos);
    OnClickMethod(pos);
}

public abstract void OnClickCore(Vector2 pos);

现在OnClick是一个模板方法,它定义了在调用时需要调用的规则集。