C#中的匿名内部类
我正在编写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(...);
这解决了具有许多处理程序的问题,但仍不强制实现者添加处理程序。
因此,我的问题是,您如何在惯用的C#中模拟这样的内容?
回答:
您可以使委托成为Link类的构造函数的一部分。这样,用户将不得不添加它。
public class Link {
public Link(string id, Action handleStuff)
{
...
}
}
然后,您可以通过以下方式创建实例:
var link = new Link("id", () => do stuff);
以上是 C#中的匿名内部类 的全部内容, 来源链接: utcz.com/qa/432850.html