0

重複の可能性:
Azure Queue Storage でのオブジェクト メッセージの受け渡し

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 は常に null です。

ここで同様の行で解決策に出くわしましたが、まだ試していません。

この動作は正常ですか、それとも何か不足していますか?

4

2 に答える 2

0

これらは OOP の基本原則です。"as AzureQueueMessage" キャストを使用すると、実際には、"これが実際に AzureQueueMessage のインスタンスであるかどうかを確認してください" と言います。しかし、GetMessage() は AzureQueueMessage を返さず、CloudQueueMessage を返します。これを変更する方法はありません。

AzureQueueMessage のインスタンスを操作する場合は、後で自分で作成する必要があります。返された CloudQueueMessage を受け取り、すべての値を引き継ぐコンストラクターを作成できます。

于 2012-07-25T05:19:27.917 に答える
0

あなたが望むものは完全に達成可能ですが、わずかに異なる方法で実現できます。これは「厳密に型指定されたキュー」として知られています。あなたの質問に完全に答えることができるので、このSOの質問をチェックしてください。

于 2012-07-25T05:41:45.290 に答える