在不干扰不安全代码的情况下,指向方法范围之外的类的新实例


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(反之亦然(。

相关内容

  • 没有找到相关文章

最新更新