首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在接口C#中调用事件?

如何在接口C#中调用事件?
EN

Stack Overflow用户
提问于 2009-01-25 06:27:43
回答 2查看 3K关注 0票数 2

所以我有一个设计问题。我有一个有委托和事件的鼠标类。ie MouseButtonPressed,MouseMoved。以及由状态引擎调用的对象。

我希望发生的是创建一个像IClickable或IDraggable之类的接口,并在这些接口中有事件,这些事件在鼠标事件被调用时被调用。

代码语言:javascript
运行
复制
public interface IClickable

public event MouseDevice.ButtonClickedHandler<MouseButtons, MouseState> Clicked;

然后在MouseDevice类中,它具有

代码语言:javascript
运行
复制
public delegate void ButtonClickedHandler<O, S>(object sender, InputDeviceEventArgs<O, S> e);

代码语言:javascript
运行
复制
public event ButtonClickedHandler<MouseButtons, MouseState> ButtonClicked;

所以基本上,我希望在buttonClicked被调用时,Clicked被调用。

有没有办法做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2009-01-25 07:21:27

你是说像这样的东西?

代码语言:javascript
运行
复制
public class MouseDevice {
    public delegate void ButtonClickedHandler<O, E>(O sender, E e);
}

public interface IClickable<O,E> {
    event MouseDevice.ButtonClickedHandler<O,E> Clicked;
}

public class StateMachine : IClickable<Control,MouseEventArgs>
{

    public event MouseDevice.ButtonClickedHandler<Control, MouseEventArgs> Clicked;

    protected void OnButtonClicked(Control sender,MouseEventArgs e) { 
        if (Clicked != null){
            Clicked(sender, e);
        }
    }
}

public class Test {
    public static void main(string[] args)
    {
        StateMachine m = new StateMachine();
        m.Clicked += new MouseDevice.ButtonClickedHandler<Control, MouseEventArgs>(m_Clicked);
    }

    static void m_Clicked(Control sender, MouseEventArgs e)
    {
        //Handle Click Event...
    }
}
票数 2
EN

Stack Overflow用户

发布于 2009-06-15 11:19:59

当您在接口内声明事件时,它实际上并不创建可以调用的事件-然后您必须在实现该接口的任何类中实现该事件。

由于接口不能包含任何代码,因此您必须在所有实现类中单独添加OnMouseClicked方法(或其他方法),以便在类中调用事件。您还可以使OnMouseClicked成为接口本身的扩展方法,但这稍微颠覆了扩展方法的用途……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/477259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档