C#泛型铸造。从基类铸造

时间:2016-11-20 01:41:35

标签: c# generics casting

我有一个C#viewmodel,我在构造函数中传递一个泛型类型:

ViewModel

在我的public IIncrementalLoadingHelper<BaseDTO> IncrementalLoadingHelper {get; set;} 基类中,我有以下属性:

MessageDTO

BaseDTO继承自IncrementalLoadingHelper = incrementalLoadingHelper

在设置IIncrementalLoadingHelper<MessageDTO>的行上,我收到错误:

  

无法将IIncrementalLoadingHelper<BaseDTO>类型隐式转换为this.state。存在显式转换(您是否错过了演员?)

我可能错过了演员表,但我不知道怎么做。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

您实际需要的只是通用类型的generic out modifier

    class BaseDTO { }
    class MessageDTO : BaseDTO { }
    interface IIncrementalLoadingHelper<out T> { }

    class ViewModelTestPage
    {
        IIncrementalLoadingHelper<BaseDTO> IncrementalLoadingHelper { get; }

        public ViewModelTestPage(IIncrementalLoadingHelper<MessageDTO> incrementalLoadingHelper)
        {
            IncrementalLoadingHelper = incrementalLoadingHelper;
        }
    }

那就是说,对我来说,属性是基类型没有多大意义,但构造函数采用派生类型。为什么不直接使用派生类型作为属性类型?