【问题标题】:Action delegate as a member doesn't compile作为成员的动作委托不编译
【发布时间】:2012-07-20 00:31:23
【问题描述】:

为什么这段代码不能编译:

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]”隐式转换为“System.Action [mscorlib.dll]”..FakeESBSingleMessage.cs 21 32
错误 36 委托“System.Action”有一些无效参数 ..\FakeESBSingleMessage.cs 16 13

我正在尝试创建一个用于测试的假 ESB 组件,它保存传递给订阅的委托并在调用发布时调用它。

【问题讨论】:

    标签: c# esb


    【解决方案1】:

    您收到编译错误是因为您的发布和订阅消息定义了一个新的类型参数 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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      相关资源
      最近更新 更多