0

このコードがコンパイルされない理由:

public class FakeESBSingleMessage<T> : IBusEnabledClass
{
    private Action<T> SubscribedAction { get; set; }

    #region IBusEnabledClass

    public void Publish<T>(T message)
    {
        SubscribedAction(message);
    }

    public void Subscribe<T>(string ID, Action<T> action)
    {
        SubscribedAction = action;
    }

    #endregion
}

次のエラーが発生します。

エラー 37 引数 1: 'T [..FakeESBSingleMessage.cs(8)]' から 'T' ..FakeESBSingleMessage.cs 16 30
エラー 39 型 'System.Action [mscorlib.dll]' を 'T' に暗黙的に変換できませんSystem.Action [mscorlib.dll]' ..FakeESBSingleMessage.cs 21 32
エラー 36 デリゲート 'System.Action' に無効な引数があります..\FakeESBSingleMessage.cs 16 13

サブスクライブに渡されたデリゲートを保存し、パブリッシュが呼び出されたときにそれを呼び出す、テスト用の偽の ESB コンポーネントを作成しようとしています。

4

1 に答える 1

6

Publish および Subscribe メッセージは、クラスで定義されたものを使用するのではなく、新しい型パラメーター T を定義するため、コンパイル エラーが発生します。代わりにこれを試してください:

public class FakeESBSingleMessage<T> : IBusEnabledClass
{
    private Action<T> SubscribedAction { get; set; }

    #region IBusEnabledClass

    public void Publish(T message)
    {
        SubscribedAction(message);
    }

    public void Subscribe(string ID, Action<T> action)
    {
        SubscribedAction = action;
    }

    #endregion
}
于 2012-07-19T16:19:57.067 に答える