使用从CloudQueueMessage派生的类型

时间:2012-07-25 04:40:53

标签: c# oop azure azure-queues

  

可能重复:
  Passing object messages in Azure Queue Storage

我正在研究一个用例,该用例要求我的队列消息比Windows Azure Queue Messages(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在返回到派生类时始终为null。

我确实遇到了类似行here的解决方案,但我还没试过。

这种行为是正常还是我遗漏了什么?

2 个答案:

答案 0 :(得分:0)

这些是OOP的基本原则。当您使用“as AzureQueueMessage”强制转换时,您实际上会说:“尝试查看这个实例是否实际上是AzureQueueMessage”。但GetMessage()不返回AzureQueueMessage,它返回CloudQueueMessage,并且您无法更改它。

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

答案 1 :(得分:0)

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