public void Get(IMqMessageWrapper mqMessageWrapper)
{
var realMqMessage= new MQMessage();
mqMessageWrapper= new MqMessageWrapper(realMqMessage);
}
public interface IMqMessageWrapper
{
Encoding Encoding { get; set; }
int BackoutCount {get;} // Is readonly
}
如何在方法内部完成mqMessageWrapper
的更新,并且仍然能够在不干扰unsafe
的情况下在该方法的范围之外使用更新后的mqMessageWrapper
?
我希望能够在Get方法的范围之外使用mqMessageWrapper,而不必使用返回类型(这必须与重建现有库有关,并尽可能接近旧的实现(。
我知道这应该很简单,但我找不到合适的术语来搜索解决方案。
编辑:更多上下文:
我正在为IBMMQ C#库编写一个包装器库,以使事情变得更容易。IBM的人员选择不返回值,而是更新传递给方法的对象。
为了不必完全重写,我试图保持包装类方法与原始方法的签名基本相同。
我明白我的建议是非传统的。如果不可能,那也是一个答案。重构架构不是我想立即做的事情,但如果没有其他可行的选择,那就是我需要做的
我试图包装的方法在IBM的这个例子中使用:https://www.ibm.com/docs/en/ibm-mq/9.0?topic=programs-示例c代码碎片-use-net
// First define an IBM MQ message buffer to receive the message
MQMessage retrievedMessage =new MQMessage();
retrievedMessage.MessageId =hello_world.MessageId;
// Set the get message options
MQGetMessageOptions gmo =new MQGetMessageOptions(); //accept the defaults
//same as MQGMO_DEFAULT
// Get the message off the queue
system_default_local_queue.Get(retrievedMessage,gmo);
// Prove we have the message by displaying the UTF message text
String msgText = retrievedMessage.ReadUTF();
Console.WriteLine("The message is: {0}", msgText);
假设"MyClass";以及";someOtherClass";是兼容类型,cast语法如下所示:
public void Get(MyClass result)
{
result = (MyClass)getSomeOtherClass();
}
但我也会更改它以返回一个值:
public MyClass Get()
{
return (MyClass)getSomeOtherClass();
}
然而,如果";someOtherClass";以及";MyClass";类型与不兼容,您无法做到这一点。
那么";兼容的";意思是在这种情况下,MyClass
必须继承自someOtherClass
(反之亦然(。