簡體   English   中英

協變接口不可能包含類型參數是協變類型的泛型類型嗎?

[英]Is it not possible to have a covariant interface contain a generic type who's type parameter is the covariant type?

我有一個協變接口和不相關的通用 class 。 我希望協變接口有一個屬性,它是協變類型上通用 class 的實例,就像這樣。

public interface IFoo<out T>
{
    Bar<T> barobj { get; set; }
}

public class Bar<T>
{
}

不幸的是,我遇到了一個錯誤

錯誤 CS1961 無效方差:類型參數“T”必須在“IFoo<T>.barobj”上始終有效。 “T”是協變的。

這是否意味着不可能有一個具有使用協變類型作為參數的泛型類型的協變接口? 我在這里做錯了嗎?

一個接口只有在它只允許泛型類型的輸出時才能是協變的。 您的界面不是協變的,因為您可以設置barobj的值。 如果您將屬性設為只讀,則如果barobj是協變的,它可以是協變的。 這意味着您需要Bar的協變接口:

public interface IFoo<out T>
{
    IBar<T> barobj { get; }
}

public class Bar<T> : IBar<T>
{
}

public interface IBar<out T> 
{
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM