繁体   English   中英

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

[英]C# Generics Casting. Casting from Base Class

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

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

在我的ViewModel基类中,我有以下属性:

public IIncrementalLoadingHelper<BaseDTO> IncrementalLoadingHelper {get; set;}

MessageDTO继承自BaseDTO

在设置IncrementalLoadingHelper = incrementalLoadingHelper的行上,我收到一个错误:

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

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

您实际需要的只是泛型类型的通用out修饰符

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM