如何将方法参数以Object类型传递并还原为原类型?(DevExpress Messenger封装)
问题描述
我想要封装DevExpress Messenger的功能,要求能把任意类型的变量传递给封装方法,方法内部自动将其还原为原始类型,确保发送的消息和注册时的类型一致。
我原本以为这做不到,但看到DevExpress官方示例里的Send方法可以直接接收任意类型的对象,还能被对应类型的注册者正确接收,对此我很困惑。
我知道用泛型可以实现类似功能(如下代码),但这种方式需要修改方法签名,得给至少400处调用指定泛型类型,太麻烦。我希望能直接全局替换Messenger.Default.Send为MessengerWrapper.Send,不用改原有调用的参数写法。
现有泛型实现示例
public static void Send<T>(object message) { Messenger.Default.Send(message: (T)message); SIMSGlobal.LogInformationMessageSend(token); }
DevExpress官方示例代码
public class MyMessage {} public class Recipient { public Recipient() { // 接收string类型的消息 Messenger.Default.Register<string>(this, OnMessage1); // 接收自定义MyMessage类型的消息 Messenger.Default.Register<MyMessage>(this, OnMessage2); } void SendMessages() { // 发送string类型消息 Messenger.Default.Send("test"); // 发送自定义MyMessage类型消息 Messenger.Default.Send(new MyMessage()); } void OnMessage1(string message) { //... } void OnMessage2(MyMessage message) { //... } }
内容的提问来源于stack exchange,提问作者Justin Lilly
相关产品推荐
相关产品推荐

