C# 在派生类中调用抽象方法时从抽象类调用方法

C# 在派生类中调用抽象方法时从抽象类调用方法,c#,xna,listener,C#,Xna,Listener,我正在用XNA制作一个带有自定义控件设置的用户界面。我有一个名为Clickable的基本抽象类,它包含在各种操作发生时运行的方法,例如OnClick,OnRelease 我已经尝试将侦听器实现到这一点,我使用以下两种方法来实现这一点: public void RegisterClickListener(Action<Vector2> ClickMethod) { listners.Add(ClickMethod); } public void OnClickMethod(V

我正在用XNA制作一个带有自定义控件设置的用户界面。我有一个名为
Clickable
的基本抽象类,它包含在各种操作发生时运行的方法,例如
OnClick
OnRelease

我已经尝试将侦听器实现到这一点,我使用以下两种方法来实现这一点:

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

public void OnClickMethod(Vector2 pos)
{
    foreach (Action<Vector2> func in listners)
        func(pos);
}
在保持OnClick抽象的同时,有什么方法可以做到这一点吗?或者每次我使用它时,我都必须去掉摘要并打电话给base吗?

您正在寻找的。创建一个充当模板的方法(按固定顺序执行某些步骤),然后为客户机提供仅覆盖其中一小部分的选项

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

public abstract void OnClickCore(Vector2 pos);

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

@LexWebb仔细查看我的代码
OnClick
不是更抽象或更虚拟的。我添加了
OnClickCore
方法,这就是派生类需要实现的,它们不需要调用
OnClickMethod
啊,我想我明白你的意思了。因此,我将从侦听鼠标单击的类调用
OnClick
,并在
OnClickCore
方法的派生类中执行
OnClick
函数?@LexWebb是的,没错。派生类不能控制
OnClick
,它们只能访问
OnClickCore
。一旦它完成执行,就会调用
OnClickMethod
(当没有异常时:()
public void OnClick(Vector2 pos)
{
    OnClickCore(pos);
    OnClickMethod(pos);
}

public abstract void OnClickCore(Vector2 pos);