Eoi*_*ell 5 .net c# activemq-classic properties
最近在使用C#和ActiveMQ(通过Apache.NMS库)进行一些工作时,我遇到了以下属性 ActiveMQBytesMessage
public new byte[] Content
{
get
{
byte[] buffer = (byte[]) null;
this.InitializeReading();
if (this.length != 0)
{
buffer = new byte[this.length];
this.dataIn.Read(buffer, 0, buffer.Length);
}
return buffer;
}
..(setter omitted)
}
Run Code Online (Sandbox Code Playgroud)
该InitialiseReading
方法处理从活动MQ到.dataIn
字段的数据的连接和流传输.但问题在于它每天都有这个问题.一旦读取了数据,就无法再次读取数据并且dataIn字段为零并重置.因此,只需观察属性并再次观察它,就会丢失数据.这使得一些非常奇怪的错误,例如:
byte [] myBytes = new byte[msg.Content.Length];
//Touched the property. Data read in.
msg.Content.CopyTo(myBytes,0);
//Uh oh! touched it again, copying a zero'd array.
Run Code Online (Sandbox Code Playgroud)
或者在您进行调试时,您在该属性上粘贴了一个监视变量,或者意外地将鼠标悬停在该属性上.
这种机制是使用流数据属性的公认或流行方式吗?
非常非常差的代码.
一般的智慧是属性不应该影响对象的内部状态.如果你调用set,那么你应该总是得到你刚刚设置的值.如果你打电话给twicwe,你应该得到两次相同的结果.
这应该是一个GetContent
至少被调用的方法,但id仍然期望能够重复调用该方法并获得相同的结果.