C# 如何将此c代码移植到f以处理SFML事件
我正在尝试用F创建一个SFML应用程序,因为没有F教程,所以我正在尝试从c教程中学习。我根本不懂c,只懂f的基本知识 我在C语言中遇到了这段代码,我不确定等价的F代码是什么C# 如何将此c代码移植到f以处理SFML事件,c#,f#,sfml,C#,F#,Sfml,我正在尝试用F创建一个SFML应用程序,因为没有F教程,所以我正在尝试从c教程中学习。我根本不懂c,只懂f的基本知识 我在C语言中遇到了这段代码,我不确定等价的F代码是什么 static void Main() { ... window.KeyPressed += new EventHandler<KeyEventArgs>(OnKeyPressed); ... }
static void Main()
{
...
window.KeyPressed += new EventHandler<KeyEventArgs>(OnKeyPressed);
...
}
static void OnKeyPressed(object sender, KeyEventArgs e)
{
Window window = (Window)sender;
if (e.Code == Keyboard.Key.Escape)
window.Close();
}
F将事件转换为IEEvent,该事件公开AddHandler方法以及IObservable.Subscribe方法
您可以使用AddHandler添加委托,相当于C中的+=委托
如果要进行事件处理,最好将事件视为可观察事件
window.KeyPress |> Observable.op... |> Observable.subscribe(fun evt -> printfn "Pressed %A" evt.Code)
还有一个事件模块,可以让您编写事件。您当前的示例可以改写为:
window.KeyPress
|> Event.filter(fun evt -> evt.Code = Keyboard.Key.Escape)
|> Event.add (fun _ -> window.Close())
这三种方法中的任何一种都有主要的优点/缺点吗?或者这只是一个偏好的问题?如果您想简化删除处理程序的过程,请选择subscribe,因为它为您提供了删除处理程序的一次性方法。Event.add更适合于类型推断。除此之外,个人偏好。
window.KeyPress
|> Event.filter(fun evt -> evt.Code = Keyboard.Key.Escape)
|> Event.add (fun _ -> window.Close())