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






