我正在编写 C# Wicket 实现以加深我对 C# 和 Wicket 的理解。我们遇到的问题之一是 Wicket 大量使用匿名内部类,而 C# 没有匿名内部类。
因此,例如,在 Wicket 中,您可以这样定义一个链接:
Link link = new Link("id") {
@Override
void onClick() {
setResponsePage(...);
}
};
由于Link是一个抽象类,它强制实现者实现onClick方法。
但是,在 C# 中,由于没有匿名内部类,因此无法做到这一点。作为替代方案,您可以使用如下事件:
var link = new Link("id");
link.Click += (sender, eventArgs) => setResponsePage(...);
当然,这样做有几个缺点。首先,可以有多个 Click 处理程序,这可能并不酷。它也不会强制实现者添加 Click 处理程序。
另一种选择可能是只具有这样的闭包属性:
var link = new Link("id");
link.Click = () => setResponsePage(...);
这解决了有很多handler的问题,但仍然不强制实现者添加handler。
所以,我的问题是,你如何在惯用的 C# 中模拟这样的东西?
最佳答案
您可以使委托(delegate)成为 Link 类的构造函数的一部分。这样用户就必须添加它。
public class Link
{
public Link(string id, Action handleStuff)
{
...
}
}
然后你这样创建一个实例:
var link = new Link("id", () => do stuff);
关于c# - C#中的匿名内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4770180/