You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#开发者求助:将自定义事件代码转换为Android实现代码

嗨,这就帮你把C#里的自定义事件逻辑转换成Android平台常用的Java和Kotlin实现,完美对应你说的「MyFirstClass触发MySecondClass自定义事件」的需求:

Java 实现方案

首先定义和C#中MyCustomEventArgs对应的自定义事件参数类:

public class MyCustomEventArgs {
    private String message;
    private int code;

    // 构造方法,用于传递事件携带的数据
    public MyCustomEventArgs(String message, int code) {
        this.message = message;
        this.code = code;
    }

    // Getter方法,供监听器获取事件数据
    public String getMessage() {
        return message;
    }

    public int getCode() {
        return code;
    }
}

接下来是MySecondClass,Android里没有C#直接的event关键字,我们用接口回调来模拟事件机制:

public class MySecondClass {
    // 定义事件回调接口,相当于C#里的EventHandler委托
    public interface MyCustomEventListener {
        void onCustomEventTriggered(MyCustomEventArgs args);
    }

    // 保存注册的监听器(如果需要支持多个监听器,换成List<MyCustomEventListener>即可)
    private MyCustomEventListener mEventListener;

    // 对外提供注册事件监听器的方法
    public void setMyCustomEventListener(MyCustomEventListener listener) {
        this.mEventListener = listener;
    }

    // 提供移除监听器的方法,避免内存泄漏
    public void removeMyCustomEventListener() {
        this.mEventListener = null;
    }

    // 触发事件的方法,可以内部调用也可以暴露给外部(比如MyFirstClass)
    public void triggerCustomEvent(String message, int code) {
        // 先判断监听器是否存在,避免空指针
        if (mEventListener != null) {
            mEventListener.onCustomEventTriggered(new MyCustomEventArgs(message, code));
        }
    }
}

最后是MyFirstClass,用来触发MySecondClass的自定义事件:

public class MyFirstClass {
    public void doActionAndTriggerEvent() {
        MySecondClass secondClass = new MySecondClass();
        
        // 注册事件回调,处理事件触发后的逻辑
        secondClass.setMyCustomEventListener(args -> {
            System.out.println("收到自定义事件:" + args.getMessage() + ",状态码:" + args.getCode());
        });

        // 触发自定义事件
        secondClass.triggerCustomEvent("由MyFirstClass触发的事件", 200);
    }
}
Kotlin 实现方案

Kotlin可以用更简洁的高阶函数来实现,当然也支持接口方式,这里给出更常用的高阶函数版本:

首先是自定义事件参数类,用Kotlin的data class可以自动生成Getter等方法:

data class MyCustomEventArgs(val message: String, val code: Int)

然后是MySecondClass:

class MySecondClass {
    // 用高阶函数存储事件回调,相当于C#的EventHandler
    private var onCustomEvent: ((MyCustomEventArgs) -> Unit)? = null

    // 注册事件回调
    fun setOnCustomEvent(listener: ((MyCustomEventArgs) -> Unit)?) {
        this.onCustomEvent = listener
    }

    // 触发事件,用安全调用避免空指针
    fun triggerCustomEvent(message: String, code: Int) {
        onCustomEvent?.invoke(MyCustomEventArgs(message, code))
    }
}

MyFirstClass的调用逻辑:

class MyFirstClass {
    fun doActionAndTriggerEvent() {
        val secondClass = MySecondClass()
        
        // 注册事件回调
        secondClass.setOnCustomEvent { args ->
            println("收到自定义事件:${args.message},状态码:${args.code}")
        }

        // 触发事件
        secondClass.triggerCustomEvent("由MyFirstClass触发的事件", 200)
    }
}

补充说明

如果需要支持多个监听器,只需要把单个监听器变量换成集合即可:

  • Java中用List<MyCustomEventListener>,注册时list.add(listener),触发时遍历集合调用每个监听器的方法
  • Kotlin中用MutableList<(MyCustomEventArgs) -> Unit>,注册时list.add(listener),触发时遍历调用listener.invoke(args)

内容的提问来源于stack exchange,提问作者delux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:08:30