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

回到顶部