我正在研究一个用例,该用例要求我的队列消息比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的解决方案,但我还没试过。
这种行为是正常还是我遗漏了什么?
答案 0 :(得分:0)
这些是OOP的基本原则。当您使用“as AzureQueueMessage”强制转换时,您实际上会说:“尝试查看这个实例是否实际上是AzureQueueMessage”。但GetMessage()不返回AzureQueueMessage,它返回CloudQueueMessage,并且您无法更改它。
如果您想使用AzureQueueMessage的实例,则必须自己创建它。您可以编写一个接受返回的CloudQueueMessage并接管所有值的构造函数。
答案 1 :(得分:0)
你想要的是完全可以实现的,但方式略有不同。它被称为“强类型队列”。查看this SO question,因为它将完全回答您的问题。