簡體   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