0

可能重复:
在 Azure 队列存储中传递对象消息

我正在研究一个用例,它需要我的队列消息比 Windows Azure 队列消息(CloudQueueMessage 类)提供的属性多一些。我不能使用 CloudQueueMessage 中的大多数属性,因为它们大多受到保护。

所以我想继承 CloudQueueMessage 并将我的额外属性添加到派生类失败。我的派生类如下所示:

public class AzureQueueMessage : CloudQueueMessage
{
      public AzureQueueMessage(string content): base(content)
      {
      }

      //My new property
      public string Label { get; set; }
}

我的消息插入和检索代码的其余部分如下所示:

AzureQueueMessage message = new AzureQueueMessage("testing");
cloudQueue.AddMessage(message);
CloudQueueMessage qmessage = cloudQueue.GetMessage();
AzureQueueMessage azureMessage = qmessage as AzureQueueMessage;

在这里,cloudQueue 是我的 Azure Queue 实例。

消息插入正常,但 azureMessage 始终为空,因为强制转换回我的派生类。

我确实在这里遇到了类似的解决方案,但我还没有尝试过。

这种行为是正常的还是我错过了什么?

4

2 回答 2

0

这些是 OOP 的基本原则。当您使用“as AzureQueueMessage”演员表时,您实际上是在说:“尝试看看这是否是实例实际上是一个 AzureQueueMessage”。但是 GetMessage() 不会返回 AzureQueueMessage,它会返回 CloudQueueMessage,而且您无法更改它。

如果您想使用 AzureQueueMessage 的实例,您必须在之后自己创建它。您可以编写一个构造函数来接受返回的 CloudQueueMessage 并接管所有值。

于 2012-07-25T05:19:27.917 回答
0

您想要的完全可以实现,但方式略有不同。它被称为“强类型队列”。查看这个 SO question,因为它将完全回答您的问题。

于 2012-07-25T05:41:45.290 回答