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