Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用从CloudQueueMessage派生的类型_C#_Oop_Azure_Azure Queues - Fatal编程技术网

C# 使用从CloudQueueMessage派生的类型

C# 使用从CloudQueueMessage派生的类型,c#,oop,azure,azure-queues,C#,Oop,Azure,Azure Queues,可能重复: 我正在处理一个用例,该用例要求我的队列消息比Windows Azure队列消息(CloudQueueMessage类)提供的属性多几个属性。我不能使用CloudQueueMessage中的大多数属性,因为它们大多受到保护 因此,我想继承CloudQueueMessage并将我的额外属性添加到派生类。我的派生类如下所示: public class AzureQueueMessage : CloudQueueMessage { public AzureQueueMessag

可能重复:

我正在处理一个用例,该用例要求我的队列消息比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;
我的邮件插入和检索代码的其余部分如下所示:

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队列实例

消息插入很好,但是azureMessage在转换回派生类时始终为null

我确实在类似的线路上遇到了一个解决方案,但我还没有尝试过


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

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


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

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

我在最初的问题中提到了这条线索。我只是想在获取每条消息时避免反序列化。但我想如果没有反序列化,就无法实现这一点。感谢您的回复。您认为在没有序列化/反序列化的情况下,如何通过网络发送和对象?这是唯一可行的办法。