c# - C#中的匿名内部类

标签 c# java closures wicket anonymous-inner-class

我正在编写 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/

相关文章:

c# - 按计算值排序列表

c# - 单色触摸 : Doubling Appearance Image size when Hue adjusted on Retina display

c# - 路由配置不起作用

java - 什么是 NullPointerException,我该如何解决?

Javascript:在前缀树中准确找到 10 个以给定前缀开头的单词

c# - 如何获取有关最近连接的 USB 设备的信息?

java - 安卓开机动画

java - 卡在使用smack制作聊天客户端的第一步

javascript - 闭包示例自调用做了什么部分

rust - 函数可以返回一个接受字符串参数和返回值的闭包吗?