【问题标题】:Implementing Listener from Java in C#在 C# 中从 Java 实现侦听器
【发布时间】:2015-04-24 21:10:30
【问题描述】:

我正在尝试编写一个 C# 程序。该功能已经实现(但在 Java 中)。

有什么方法可以像在 Java 中那样在方法中实现“DeviceController.OnDeviceControllerListener”-Interface 吗? 我需要像 Java 代码示例中那样实现和自定义覆盖方法(onError、onRead 和 onInsert):

deviceController.setOnDeviceControllerListener(new DeviceController.OnDeviceControllerListener() {
        @Override
        public void onError(ControllerError.Error error, String message) {
        }

        @Override
        public void onRead(MobileServiceList<Device> devices) {
            if(devices == null || devices.size() == 0) {
                deviceController.insert(context, device);
            }
        }

        @Override
        public void onInsert(Device device) {
        }
    });

我希望你能理解我的问题。这对我来说很难解释。

【问题讨论】:

  • 你可以将java代码的功能重写为C#?
  • 我已经编写了所有其他功能。我的程序中有一些异步方法,最后我想返回这个方法(onError,...)
  • 使用锐化等工具可以节省大量时间。
  • 在我的情况下,锐化并没有真正做太多,因为我正在将应用程序从 Android 移植到 WindowsPhone

标签: java c# interface listener


【解决方案1】:

创建您自己的界面,例如

interface IOnDeviceControllerListener
{
        void OnError(ControllerError.Error error, String message);
        void OnRead(MobileServiceList<Device> devices);
        void OnInsert(Device device);
}

下一节课:

DeviceControllerListener : IOnDeviceControllerListener
{
   //  implementation
}

在您的控制器中定义方法(在您的情况下为 setOnDeviceControllerListener)哪个参数是 IOnDeviceControllerListener,在这种情况下设置实现 DeviceControllerListener 并在 IOnDeviceControllerListener 的 devicecontroller 类调用方法的实现中设置

【讨论】:

  • 非常感谢您的回答。我认为不可能像在 Java 中那样做到这一点,所以我必须创建单独的类。
  • @TableCreek - 正确,C# 不支持像您的示例那样的匿名内部类。类似侦听器的接口的惯用 C# 方式是使用事件和委托。
  • 它被称为内部类...谢谢 :) 好的,我会向谷歌询问有关事件和代表的更多信息。
  • @Paolo:惯用的 C# 方式的问题在于它只适用于最简单的示例——即,单一方法,没有字段。创建一个新类来实现接口或扩展抽象类处理所有情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 2021-03-03
相关资源
最近更新 更多